183 lines
4.8 KiB
Go
183 lines
4.8 KiB
Go
package v1
|
|
|
|
import (
|
|
"github.com/labstack/echo/v4"
|
|
|
|
v1 "github.com/chaitin/panda-wiki/api/nav/v1"
|
|
"github.com/chaitin/panda-wiki/consts"
|
|
"github.com/chaitin/panda-wiki/handler"
|
|
"github.com/chaitin/panda-wiki/log"
|
|
"github.com/chaitin/panda-wiki/middleware"
|
|
"github.com/chaitin/panda-wiki/usecase"
|
|
)
|
|
|
|
type NavHandler struct {
|
|
*handler.BaseHandler
|
|
logger *log.Logger
|
|
usecase *usecase.NavUsecase
|
|
auth middleware.AuthMiddleware
|
|
}
|
|
|
|
func NewNavHandler(
|
|
baseHandler *handler.BaseHandler,
|
|
echo *echo.Echo,
|
|
usecase *usecase.NavUsecase,
|
|
auth middleware.AuthMiddleware,
|
|
logger *log.Logger,
|
|
) *NavHandler {
|
|
h := &NavHandler{
|
|
BaseHandler: baseHandler,
|
|
logger: logger.WithModule("handler.v1.nav"),
|
|
usecase: usecase,
|
|
auth: auth,
|
|
}
|
|
|
|
group := echo.Group("/api/v1/nav", h.auth.Authorize, h.auth.ValidateKBUserPerm(consts.UserKBPermissionDocManage))
|
|
group.GET("/list", h.NavList)
|
|
group.POST("/add", h.NavAdd)
|
|
group.DELETE("/delete", h.NavDelete)
|
|
group.PATCH("/update", h.NavUpdate)
|
|
group.POST("/move", h.NavMove)
|
|
|
|
return h
|
|
}
|
|
|
|
// NavList
|
|
//
|
|
// @Summary 获取分栏列表
|
|
// @Description Get Nav List
|
|
// @Tags Nav
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Security bearerAuth
|
|
// @Param params query v1.NavListReq true "Params"
|
|
// @Success 200 {object} domain.PWResponse{data=[]v1.NavListResp}
|
|
// @Router /api/v1/nav/list [get]
|
|
func (h *NavHandler) NavList(c echo.Context) error {
|
|
ctx := c.Request().Context()
|
|
|
|
var req v1.NavListReq
|
|
if err := c.Bind(&req); err != nil {
|
|
return h.NewResponseWithError(c, "invalid request", err)
|
|
}
|
|
if err := c.Validate(req); err != nil {
|
|
return h.NewResponseWithError(c, "validate request params failed", err)
|
|
}
|
|
nodes, err := h.usecase.GetList(ctx, req.KbId)
|
|
if err != nil {
|
|
return h.NewResponseWithError(c, "get nav list failed", err)
|
|
}
|
|
return h.NewResponseWithData(c, nodes)
|
|
}
|
|
|
|
// NavAdd
|
|
//
|
|
// @Summary 添加分栏
|
|
// @Description Add Nav
|
|
// @Tags Nav
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Security bearerAuth
|
|
// @Param body body v1.NavAddReq true "Params"
|
|
// @Success 200 {object} domain.PWResponse
|
|
// @Router /api/v1/nav/add [post]
|
|
func (h *NavHandler) NavAdd(c echo.Context) error {
|
|
ctx := c.Request().Context()
|
|
|
|
var req v1.NavAddReq
|
|
if err := c.Bind(&req); err != nil {
|
|
return h.NewResponseWithError(c, "invalid request", err)
|
|
}
|
|
if err := c.Validate(req); err != nil {
|
|
return h.NewResponseWithError(c, "validate request params failed", err)
|
|
}
|
|
|
|
if err := h.usecase.Add(ctx, &req); err != nil {
|
|
return h.NewResponseWithError(c, "add nav failed", err)
|
|
}
|
|
return h.NewResponseWithData(c, nil)
|
|
|
|
}
|
|
|
|
// NavDelete
|
|
//
|
|
// @Summary 删除栏目
|
|
// @Description DeleteNav Nav
|
|
// @Tags Nav
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Security bearerAuth
|
|
// @Param query query v1.NavDeleteReq true "Params"
|
|
// @Success 200 {object} domain.PWResponse
|
|
// @Router /api/v1/nav/delete [delete]
|
|
func (h *NavHandler) NavDelete(c echo.Context) error {
|
|
ctx := c.Request().Context()
|
|
|
|
var req v1.NavDeleteReq
|
|
if err := c.Bind(&req); err != nil {
|
|
return h.NewResponseWithError(c, "invalid request", err)
|
|
}
|
|
if err := c.Validate(req); err != nil {
|
|
return h.NewResponseWithError(c, "validate request params failed", err)
|
|
}
|
|
|
|
if err := h.usecase.Delete(ctx, &req); err != nil {
|
|
return h.NewResponseWithError(c, "delete nav failed", err)
|
|
}
|
|
return h.NewResponseWithData(c, nil)
|
|
}
|
|
|
|
// NavMove
|
|
//
|
|
// @Summary 移动栏目
|
|
// @Description Move Nav
|
|
// @Tags Nav
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Security bearerAuth
|
|
// @Param body body v1.NavMoveReq true "Params"
|
|
// @Success 200 {object} domain.PWResponse
|
|
// @Router /api/v1/nav/move [post]
|
|
func (h *NavHandler) NavMove(c echo.Context) error {
|
|
ctx := c.Request().Context()
|
|
var req v1.NavMoveReq
|
|
if err := c.Bind(&req); err != nil {
|
|
return h.NewResponseWithError(c, "invalid request", err)
|
|
}
|
|
if err := c.Validate(req); err != nil {
|
|
return h.NewResponseWithError(c, "validate request params failed", err)
|
|
}
|
|
if err := h.usecase.Move(ctx, &req); err != nil {
|
|
return h.NewResponseWithError(c, "move nav failed", err)
|
|
}
|
|
return h.NewResponseWithData(c, nil)
|
|
}
|
|
|
|
// NavUpdate
|
|
//
|
|
// @Summary 更新栏目信息
|
|
// @Description Update Nav
|
|
// @Tags Nav
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Security bearerAuth
|
|
// @Param body body v1.NavUpdateReq true "Params"
|
|
// @Success 200 {object} domain.PWResponse
|
|
// @Router /api/v1/nav/update [patch]
|
|
func (h *NavHandler) NavUpdate(c echo.Context) error {
|
|
ctx := c.Request().Context()
|
|
|
|
var req v1.NavUpdateReq
|
|
if err := c.Bind(&req); err != nil {
|
|
return h.NewResponseWithError(c, "invalid request", err)
|
|
}
|
|
if err := c.Validate(req); err != nil {
|
|
return h.NewResponseWithError(c, "validate request params failed", err)
|
|
}
|
|
|
|
if err := h.usecase.Update(ctx, &req); err != nil {
|
|
return h.NewResponseWithError(c, "update nav failed", err)
|
|
}
|
|
return h.NewResponseWithData(c, nil)
|
|
}
|