bindbox-game/internal/api/user/item_cards_app.go
2025-12-26 12:22:32 +08:00

129 lines
4.4 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 app
import (
"net/http"
"bindbox-game/internal/code"
"bindbox-game/internal/pkg/core"
"bindbox-game/internal/pkg/validation"
"bindbox-game/internal/repository/mysql/model"
usersvc "bindbox-game/internal/service/user"
)
type listUserItemCardsRequest struct {
Page int `form:"page"`
PageSize int `form:"page_size"`
Status *int32 `form:"status"` // 1未使用 2已使用 3已过期不传默认1
}
type listUserItemCardsResponse struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
Total int64 `json:"total"`
List []*usersvc.ItemCardWithTemplate `json:"list"`
}
// ListUserItemCards 获取用户道具卡列表
// @Summary 获取用户道具卡列表
// @Description 获取指定用户的道具卡列表,支持分页和状态过滤
// @Tags APP端.用户
// @Accept json
// @Produce json
// @Param user_id path integer true "用户ID"
// @Security LoginVerifyToken
// @Param page query integer false "页码默认1"
// @Param page_size query integer false "每页条数默认10"
// @Param status query integer false "状态1未使用 2已使用 3已过期不传默认1"
// @Success 200 {object} listUserItemCardsResponse
// @Failure 400 {object} code.Failure "参数错误"
// @Failure 401 {object} code.Failure "未授权"
// @Failure 500 {object} code.Failure "服务器内部错误"
// @Router /api/app/users/{user_id}/item_cards [get]
func (h *handler) ListUserItemCards() core.HandlerFunc {
return func(ctx core.Context) {
req := new(listUserItemCardsRequest)
rsp := new(listUserItemCardsResponse)
if err := ctx.ShouldBindForm(req); err != nil {
ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, validation.Error(err)))
return
}
userID := int64(ctx.SessionUserInfo().Id)
// 默认查询未使用的道具卡
status := int32(1)
if req.Status != nil && *req.Status > 0 {
status = *req.Status
}
var items []*usersvc.ItemCardWithTemplate
var total int64
var err error
// 道具卡列表 Status=1 (未使用) 时聚合显示数量 -> 修改为不再聚合,直接显示列表
// if status == 1 {
// items, total, err = h.user.ListAggregatedUserItemCards(ctx.RequestContext(), userID, status, req.Page, req.PageSize)
// } else {
items, total, err = h.user.ListUserItemCardsWithTemplateByStatus(ctx.RequestContext(), userID, status, req.Page, req.PageSize)
// }
if err != nil {
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10008, err.Error()))
return
}
rsp.Page = req.Page
rsp.PageSize = req.PageSize
rsp.Total = total
rsp.List = items
ctx.Payload(rsp)
}
}
type listUserItemCardUsesRequest struct {
Page int `form:"page"`
PageSize int `form:"page_size"`
}
type listUserItemCardUsesResponse struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
Total int64 `json:"total"`
List []*model.ActivityDrawEffects `json:"list"`
}
// ListUserItemCardUses 获取用户道具卡使用记录
// @Summary 获取用户道具卡使用记录
// @Description 获取指定用户的道具卡使用记录,支持分页
// @Tags APP端.用户
// @Accept json
// @Produce json
// @Param user_id path integer true "用户ID"
// @Security LoginVerifyToken
// @Param page query integer false "页码默认1"
// @Param page_size query integer false "每页条数默认10"
// @Success 200 {object} listUserItemCardUsesResponse
// @Failure 400 {object} code.Failure "参数错误"
// @Failure 401 {object} code.Failure "未授权"
// @Failure 500 {object} code.Failure "服务器内部错误"
// @Router /api/app/users/{user_id}/item_cards/uses [get]
func (h *handler) ListUserItemCardUses() core.HandlerFunc {
return func(ctx core.Context) {
req := new(listUserItemCardUsesRequest)
rsp := new(listUserItemCardUsesResponse)
if err := ctx.ShouldBindForm(req); err != nil {
ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, validation.Error(err)))
return
}
userID := int64(ctx.SessionUserInfo().Id)
items, total, err := h.user.ListUserItemCardUses(ctx.RequestContext(), userID, req.Page, req.PageSize)
if err != nil {
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10009, err.Error()))
return
}
rsp.Page = req.Page
rsp.PageSize = req.PageSize
rsp.Total = total
rsp.List = items
ctx.Payload(rsp)
}
}