duidui_fiber/internal/question/handler/material_handler.go
2026-03-27 10:34:03 +08:00

170 lines
3.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package handler
import (
"dd_fiber_api/internal/question"
"dd_fiber_api/internal/question/service"
"strconv"
"github.com/gofiber/fiber/v2"
)
// MaterialHandler 材料处理器
type MaterialHandler struct {
materialService *service.MaterialService
}
// NewMaterialHandler 创建材料处理器
func NewMaterialHandler(materialService *service.MaterialService) *MaterialHandler {
return &MaterialHandler{
materialService: materialService,
}
}
// CreateMaterial 创建材料
func (h *MaterialHandler) CreateMaterial(c *fiber.Ctx) error {
var req service.CreateMaterialRequest
if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "请求参数解析失败: " + err.Error(),
})
}
material, err := h.materialService.CreateMaterial(&req)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"message": err.Error(),
})
}
return c.JSON(fiber.Map{
"success": true,
"message": "创建成功",
"id": material.ID,
"material": material,
})
}
// GetMaterial 获取材料
func (h *MaterialHandler) GetMaterial(c *fiber.Ctx) error {
id := c.Query("id")
if id == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "材料ID不能为空",
})
}
material, err := h.materialService.GetMaterial(id)
if err != nil {
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
"success": false,
"message": err.Error(),
})
}
return c.JSON(fiber.Map{
"success": true,
"message": "获取成功",
"material": material,
})
}
// SearchMaterials 搜索材料
func (h *MaterialHandler) SearchMaterials(c *fiber.Ctx) error {
query := c.Query("query", "")
materialType := c.Query("type", "") // 材料类型objective 或 subjective
pageStr := c.Query("page", "1")
pageSizeStr := c.Query("page_size", "10")
page, err := strconv.ParseInt(pageStr, 10, 32)
if err != nil || page < 1 {
page = 1
}
pageSize, err := strconv.ParseInt(pageSizeStr, 10, 32)
if err != nil || pageSize < 1 {
pageSize = 10
}
if pageSize > 100 {
pageSize = 100
}
var materialTypeEnum question.MaterialType
if materialType != "" {
materialTypeEnum = question.MaterialType(materialType)
}
materials, total, err := h.materialService.SearchMaterials(query, materialTypeEnum, int32(page), int32(pageSize))
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"message": err.Error(),
})
}
return c.JSON(fiber.Map{
"success": true,
"message": "获取成功",
"materials": materials,
"total": total,
})
}
// UpdateMaterial 更新材料
func (h *MaterialHandler) UpdateMaterial(c *fiber.Ctx) error {
var req service.UpdateMaterialRequest
if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "请求参数解析失败: " + err.Error(),
})
}
if req.ID == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "材料ID不能为空",
})
}
err := h.materialService.UpdateMaterial(&req)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"message": err.Error(),
})
}
return c.JSON(fiber.Map{
"success": true,
"message": "更新成功",
})
}
// DeleteMaterial 删除材料
func (h *MaterialHandler) DeleteMaterial(c *fiber.Ctx) error {
id := c.Params("id")
if id == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "材料ID不能为空",
})
}
err := h.materialService.DeleteMaterial(id)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"message": err.Error(),
})
}
return c.JSON(fiber.Map{
"success": true,
"message": "删除成功",
})
}