package handler import ( "dd_fiber_api/internal/camp" "dd_fiber_api/internal/camp/service" "github.com/gofiber/fiber/v2" ) // CategoryHandler 分类处理器 type CategoryHandler struct { categoryService *service.CategoryService } // NewCategoryHandler 创建分类处理器 func NewCategoryHandler(categoryService *service.CategoryService) *CategoryHandler { return &CategoryHandler{ categoryService: categoryService, } } // CreateCategory 创建分类 func (h *CategoryHandler) CreateCategory(c *fiber.Ctx) error { var req camp.CreateCategoryRequest if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } // 验证必填字段 if req.Name == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "分类名称不能为空", }) } resp, err := h.categoryService.CreateCategory(&req) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "创建分类失败: " + err.Error(), }) } if !resp.Success { return c.Status(fiber.StatusBadRequest).JSON(resp) } return c.Status(fiber.StatusOK).JSON(resp) } // GetCategory 获取分类 func (h *CategoryHandler) GetCategory(c *fiber.Ctx) error { // 优先从查询参数获取,如果没有则从路径参数获取 id := c.Query("id") if id == "" { id = c.Params("id") } if id == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "分类ID不能为空", }) } resp, err := h.categoryService.GetCategory(id) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "获取分类失败: " + err.Error(), }) } if !resp.Success { return c.Status(fiber.StatusNotFound).JSON(resp) } return c.Status(fiber.StatusOK).JSON(resp) } // UpdateCategory 更新分类 func (h *CategoryHandler) UpdateCategory(c *fiber.Ctx) error { var req camp.UpdateCategoryRequest if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } // 从 URL 参数获取 ID(如果请求体中没有) if req.ID == "" { req.ID = c.Query("id") if req.ID == "" { req.ID = c.Params("id") } } if req.ID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "分类ID不能为空", }) } resp, err := h.categoryService.UpdateCategory(&req) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "更新分类失败: " + err.Error(), }) } if !resp.Success { return c.Status(fiber.StatusBadRequest).JSON(resp) } return c.Status(fiber.StatusOK).JSON(resp) } // DeleteCategory 删除分类 func (h *CategoryHandler) DeleteCategory(c *fiber.Ctx) error { var id string // 兼容前端:POST body 为 {"params":{"id":"xxx"}} var body struct { Params struct { ID string `json:"id"` } `json:"params"` } if err := c.BodyParser(&body); err == nil && body.Params.ID != "" { id = body.Params.ID } if id == "" { id = c.Query("id") } if id == "" { id = c.Params("id") } if id == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "分类ID不能为空", }) } resp, err := h.categoryService.DeleteCategory(id) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "删除分类失败: " + err.Error(), }) } if !resp.Success { return c.Status(fiber.StatusBadRequest).JSON(resp) } return c.Status(fiber.StatusOK).JSON(resp) } // ListCategories 列出分类 func (h *CategoryHandler) ListCategories(c *fiber.Ctx) error { var req camp.ListCategoriesRequest if err := c.QueryParser(&req); err != nil { req.Page = 1 req.PageSize = 10 } resp, err := h.categoryService.ListCategories(&req) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "获取分类列表失败: " + err.Error(), }) } return c.Status(fiber.StatusOK).JSON(resp) }