package handler import ( "dd_fiber_api/internal/camp" "dd_fiber_api/internal/camp/service" "github.com/gofiber/fiber/v2" ) // UserCampHandler 用户打卡营处理器 type UserCampHandler struct { userCampService *service.UserCampService } // NewUserCampHandler 创建用户打卡营处理器 func NewUserCampHandler(userCampService *service.UserCampService) *UserCampHandler { return &UserCampHandler{ userCampService: userCampService, } } // JoinCamp 用户加入打卡营 func (h *UserCampHandler) JoinCamp(c *fiber.Ctx) error { var req camp.JoinCampRequest if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } if req.UserID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "用户ID不能为空", }) } if req.CampID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "打卡营ID不能为空", }) } resp, err := h.userCampService.JoinCamp(&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) } // CheckUserCampStatus 检查用户打卡营状态 func (h *UserCampHandler) CheckUserCampStatus(c *fiber.Ctx) error { var req camp.CheckUserCampStatusRequest if err := c.QueryParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } if req.UserID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "用户ID不能为空", }) } if req.CampID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "打卡营ID不能为空", }) } resp, err := h.userCampService.CheckUserCampStatus(req.UserID, req.CampID) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "查询用户打卡营状态失败: " + err.Error(), }) } return c.Status(fiber.StatusOK).JSON(resp) } // CheckUserCampStatusPost 检查用户打卡营状态(POST 方式,供小程序客户端调用) func (h *UserCampHandler) CheckUserCampStatusPost(c *fiber.Ctx) error { var req camp.CheckUserCampStatusRequest if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } if req.UserID == "" { // 尝试从本地存储获取的 user_id(小程序端可能放在 body 中) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "用户ID不能为空", }) } if req.CampID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "打卡营ID不能为空", }) } resp, err := h.userCampService.CheckUserCampStatus(req.UserID, req.CampID) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "查询用户打卡营状态失败: " + err.Error(), }) } return c.Status(fiber.StatusOK).JSON(resp) } // ListUserCamps 获取用户已加入的打卡营列表 func (h *UserCampHandler) ListUserCamps(c *fiber.Ctx) error { var req camp.ListUserCampsRequest if err := c.QueryParser(&req); err != nil { req.Page = 1 req.PageSize = 10 } if req.UserID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "用户ID不能为空", }) } resp, err := h.userCampService.ListUserCamps(&req) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "获取用户打卡营列表失败: " + err.Error(), }) } return c.Status(fiber.StatusOK).JSON(resp) } // ResetCampProgress 重置打卡营进度 func (h *UserCampHandler) ResetCampProgress(c *fiber.Ctx) error { var req camp.ResetCampProgressRequest if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } if req.UserID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "用户ID不能为空", }) } if req.CampID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "打卡营ID不能为空", }) } resp, err := h.userCampService.ResetCampProgress(&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) }