193 lines
5.0 KiB
Go
193 lines
5.0 KiB
Go
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)
|
||
}
|
||
|