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

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