183 lines
4.2 KiB
Go
183 lines
4.2 KiB
Go
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)
|
||
}
|
||
|