package handlers import ( "goalfymax-admin/internal/models" "goalfymax-admin/internal/services" "goalfymax-admin/pkg/utils" "strconv" "github.com/gin-gonic/gin" "go.uber.org/zap" ) // PageHandler 页面处理器 type PageHandler struct { pageService services.PageService response *utils.Response logger *utils.Logger } // NewPageHandler 创建页面处理器 func NewPageHandler(pageService services.PageService, logger *utils.Logger) *PageHandler { return &PageHandler{ pageService: pageService, response: utils.NewResponse(), logger: logger, } } // Create 创建页面 func (h *PageHandler) Create(c *gin.Context) { var req models.PageCreateRequest if err := c.ShouldBindJSON(&req); err != nil { h.logger.Error("参数绑定失败", zap.Error(err)) h.response.ValidateError(c, err) return } page, err := h.pageService.Create(&req) if err != nil { h.logger.Error("创建页面失败", zap.Error(err)) h.response.InternalServerError(c, err.Error()) return } h.response.Success(c, page) } // GetByID 根据ID获取页面 func (h *PageHandler) GetByID(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { h.logger.Error("页面ID格式错误", zap.Error(err)) h.response.BadRequest(c, "无效的页面ID") return } page, err := h.pageService.GetByID(uint(id)) if err != nil { h.logger.Error("获取页面失败", zap.Error(err)) h.response.InternalServerError(c, err.Error()) return } h.response.Success(c, page) } // Update 更新页面 func (h *PageHandler) Update(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { h.logger.Error("页面ID格式错误", zap.Error(err)) h.response.BadRequest(c, "无效的页面ID") return } var req models.PageUpdateRequest if err := c.ShouldBindJSON(&req); err != nil { h.logger.Error("参数绑定失败", zap.Error(err)) h.response.ValidateError(c, err) return } page, err := h.pageService.Update(uint(id), &req) if err != nil { h.logger.Error("更新页面失败", zap.Error(err)) h.response.InternalServerError(c, err.Error()) return } h.response.Success(c, page) } // Delete 删除页面 func (h *PageHandler) Delete(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { h.logger.Error("页面ID格式错误", zap.Error(err)) h.response.BadRequest(c, "无效的页面ID") return } err = h.pageService.Delete(uint(id)) if err != nil { h.logger.Error("删除页面失败", zap.Error(err)) h.response.InternalServerError(c, err.Error()) return } h.response.Success(c, gin.H{"message": "页面删除成功"}) } // List 获取页面列表 func (h *PageHandler) List(c *gin.Context) { var req models.PageListRequest if err := c.ShouldBindQuery(&req); err != nil { h.logger.Error("参数绑定失败", zap.Error(err)) h.response.ValidateError(c, err) return } pages, total, err := h.pageService.List(&req) if err != nil { h.logger.Error("获取页面列表失败", zap.Error(err)) h.response.InternalServerError(c, err.Error()) return } // 如果没有分页参数,直接返回页面列表 if req.Page <= 0 || req.Size <= 0 { h.response.Success(c, pages) return } // 有分页参数时返回完整的分页信息 h.response.Success(c, gin.H{ "pages": pages, "total": total, "page": req.Page, "size": req.Size, }) }