package transport import ( "strconv" "github.com/gin-gonic/gin" "github.com/geo-platform/tenant-api/internal/bootstrap" "github.com/geo-platform/tenant-api/internal/shared/response" "github.com/geo-platform/tenant-api/internal/tenant/app" ) type EnterpriseSiteHandler struct { svc *app.EnterpriseSiteService } func NewEnterpriseSiteHandler(a *bootstrap.App) *EnterpriseSiteHandler { return &EnterpriseSiteHandler{ svc: app.NewEnterpriseSiteService(a.DB, a.ConfigStore). WithCache(a.Cache). WithObjectStorage(a.ObjectStorage), } } func (h *EnterpriseSiteHandler) List(c *gin.Context) { data, err := h.svc.List(c.Request.Context()) if err != nil { response.Error(c, err) return } response.Success(c, data) } func (h *EnterpriseSiteHandler) Create(c *gin.Context) { var req app.CreateEnterpriseSiteConnectionRequest if err := c.ShouldBindJSON(&req); err != nil { response.Error(c, response.ErrBadRequest(40001, "invalid_params", err.Error())) return } data, err := h.svc.Create(c.Request.Context(), req) if err != nil { response.Error(c, err) return } response.SuccessWithStatus(c, 201, data) } func (h *EnterpriseSiteHandler) Update(c *gin.Context) { id, ok := enterpriseSiteIDParam(c) if !ok { return } var req app.UpdateEnterpriseSiteConnectionRequest if err := c.ShouldBindJSON(&req); err != nil { response.Error(c, response.ErrBadRequest(40001, "invalid_params", err.Error())) return } data, err := h.svc.Update(c.Request.Context(), id, req) if err != nil { response.Error(c, err) return } response.Success(c, data) } func (h *EnterpriseSiteHandler) Delete(c *gin.Context) { id, ok := enterpriseSiteIDParam(c) if !ok { return } if err := h.svc.Delete(c.Request.Context(), id); err != nil { response.Error(c, err) return } response.Success(c, nil) } func (h *EnterpriseSiteHandler) Ping(c *gin.Context) { id, ok := enterpriseSiteIDParam(c) if !ok { return } data, err := h.svc.Ping(c.Request.Context(), id) if err != nil { response.Error(c, err) return } response.Success(c, data) } func (h *EnterpriseSiteHandler) Categories(c *gin.Context) { id, ok := enterpriseSiteIDParam(c) if !ok { return } data, err := h.svc.Categories(c.Request.Context(), id) if err != nil { response.Error(c, err) return } response.Success(c, data) } func (h *EnterpriseSiteHandler) SyncCategories(c *gin.Context) { id, ok := enterpriseSiteIDParam(c) if !ok { return } data, err := h.svc.SyncCategories(c.Request.Context(), id) if err != nil { response.Error(c, err) return } response.Success(c, data) } func (h *EnterpriseSiteHandler) PublishArticle(c *gin.Context) { id, ok := enterpriseSiteIDParam(c) if !ok { return } var req app.PublishEnterpriseSiteArticleRequest if err := c.ShouldBindJSON(&req); err != nil { response.Error(c, response.ErrBadRequest(40001, "invalid_params", err.Error())) return } data, err := h.svc.PublishArticle(c.Request.Context(), id, req) if err != nil { response.Error(c, err) return } response.Success(c, data) } func enterpriseSiteIDParam(c *gin.Context) (int64, bool) { id, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil || id <= 0 { response.Error(c, response.ErrBadRequest(40001, "invalid_id", "企业站点 ID 不正确")) return 0, false } return id, true }