init push
This commit is contained in:
145
backend/handler/v1/app.go
Normal file
145
backend/handler/v1/app.go
Normal file
@@ -0,0 +1,145 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
|
||||
"github.com/chaitin/panda-wiki/config"
|
||||
"github.com/chaitin/panda-wiki/consts"
|
||||
"github.com/chaitin/panda-wiki/domain"
|
||||
"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 AppHandler struct {
|
||||
*handler.BaseHandler
|
||||
logger *log.Logger
|
||||
auth middleware.AuthMiddleware
|
||||
usecase *usecase.AppUsecase
|
||||
modelUsecase *usecase.ModelUsecase
|
||||
conversationUsecase *usecase.ConversationUsecase
|
||||
config *config.Config
|
||||
}
|
||||
|
||||
func NewAppHandler(e *echo.Echo, baseHandler *handler.BaseHandler, logger *log.Logger, auth middleware.AuthMiddleware, usecase *usecase.AppUsecase, modelUsecase *usecase.ModelUsecase, conversationUsecase *usecase.ConversationUsecase, config *config.Config) *AppHandler {
|
||||
h := &AppHandler{
|
||||
BaseHandler: baseHandler,
|
||||
logger: logger.WithModule("handler.v1.app"),
|
||||
auth: auth,
|
||||
usecase: usecase,
|
||||
modelUsecase: modelUsecase,
|
||||
conversationUsecase: conversationUsecase,
|
||||
config: config,
|
||||
}
|
||||
|
||||
group := e.Group("/api/v1/app", h.auth.Authorize)
|
||||
group.GET("/detail", h.GetAppDetail, h.auth.ValidateKBUserPerm(consts.UserKBPermissionDocManage))
|
||||
group.PUT("", h.UpdateApp, h.auth.ValidateKBUserPerm(consts.UserKBPermissionFullControl))
|
||||
group.DELETE("", h.DeleteApp, h.auth.ValidateKBUserPerm(consts.UserKBPermissionFullControl))
|
||||
|
||||
return h
|
||||
}
|
||||
|
||||
// GetAppDetail get app detail
|
||||
//
|
||||
// @Summary Get app detail
|
||||
// @Description Get app detail
|
||||
// @Tags app
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security bearerAuth
|
||||
// @Param kb_id query string true "kb id"
|
||||
// @Param type query string true "app type"
|
||||
// @Success 200 {object} domain.PWResponse{data=domain.AppDetailResp}
|
||||
// @Router /api/v1/app/detail [get]
|
||||
func (h *AppHandler) GetAppDetail(c echo.Context) error {
|
||||
kbID := c.QueryParam("kb_id")
|
||||
if kbID == "" {
|
||||
return h.NewResponseWithError(c, "kb id is required", nil)
|
||||
}
|
||||
appType := c.QueryParam("type")
|
||||
if appType == "" {
|
||||
return h.NewResponseWithError(c, "type is required", nil)
|
||||
}
|
||||
appTypeInt, err := strconv.ParseInt(appType, 10, 64)
|
||||
if err != nil {
|
||||
return h.NewResponseWithError(c, "invalid app type", err)
|
||||
}
|
||||
ctx := c.Request().Context()
|
||||
app, err := h.usecase.GetAppDetailByKBIDAndAppType(ctx, kbID, domain.AppType(appTypeInt))
|
||||
if err != nil {
|
||||
return h.NewResponseWithError(c, "get app detail failed", err)
|
||||
}
|
||||
if authInfo := domain.GetAuthInfoFromCtx(ctx); authInfo != nil && authInfo.Permission == consts.UserKBPermissionDocManage {
|
||||
app = h.usecase.SanitizeAppDetailForDocManage(app)
|
||||
}
|
||||
return h.NewResponseWithData(c, app)
|
||||
}
|
||||
|
||||
// UpdateApp update app
|
||||
//
|
||||
// @Summary Update app
|
||||
// @Description Update app
|
||||
// @Tags app
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security bearerAuth
|
||||
// @Param id query string true "id"
|
||||
// @Param app body domain.UpdateAppReq true "app"
|
||||
// @Success 200 {object} domain.Response
|
||||
// @Router /api/v1/app [put]
|
||||
func (h *AppHandler) UpdateApp(c echo.Context) error {
|
||||
id := c.QueryParam("id")
|
||||
if id == "" {
|
||||
return h.NewResponseWithError(c, "id is required", nil)
|
||||
}
|
||||
|
||||
appRequest := domain.UpdateAppReq{}
|
||||
if err := c.Bind(&appRequest); err != nil {
|
||||
return h.NewResponseWithError(c, "invalid request", err)
|
||||
}
|
||||
|
||||
ctx := c.Request().Context()
|
||||
if err := h.usecase.ValidateUpdateApp(ctx, id, &appRequest); err != nil {
|
||||
h.logger.Error("UpdateApp", log.Any("req:", appRequest.Settings), log.Any("err:", err))
|
||||
return h.NewResponseWithErrCode(c, domain.ErrCodePermissionDenied)
|
||||
}
|
||||
|
||||
if err := h.usecase.UpdateApp(ctx, id, &appRequest); err != nil {
|
||||
return h.NewResponseWithError(c, "update app failed", err)
|
||||
}
|
||||
|
||||
return h.NewResponseWithData(c, nil)
|
||||
}
|
||||
|
||||
// DeleteApp delete app
|
||||
//
|
||||
// @Summary Delete app
|
||||
// @Description Delete app
|
||||
// @Tags app
|
||||
// @Accept json
|
||||
// @Security bearerAuth
|
||||
// @Param kb_id query string true "kb id"
|
||||
// @Param id query string true "app id"
|
||||
// @Success 200 {object} domain.Response
|
||||
// @Router /api/v1/app [delete]
|
||||
func (h *AppHandler) DeleteApp(c echo.Context) error {
|
||||
id := c.QueryParam("id")
|
||||
if id == "" {
|
||||
return h.NewResponseWithError(c, "id is required", nil)
|
||||
}
|
||||
|
||||
kbID := c.QueryParam("kb_id")
|
||||
if kbID == "" {
|
||||
return h.NewResponseWithError(c, "kb id is required", nil)
|
||||
}
|
||||
|
||||
if err := h.usecase.DeleteApp(c.Request().Context(), id, kbID); err != nil {
|
||||
return h.NewResponseWithError(c, "delete app failed", err)
|
||||
}
|
||||
|
||||
return h.NewResponseWithData(c, nil)
|
||||
}
|
||||
Reference in New Issue
Block a user