feat: 添加用户购买作品数量统计功能

This commit is contained in:
2025-12-20 23:23:04 +08:00
parent 65d40fa631
commit 257c9a286a
4 changed files with 165 additions and 56 deletions

View File

@@ -7,22 +7,53 @@ import (
"quyun/v2/database/models"
"github.com/gofiber/fiber/v3"
"github.com/samber/lo"
)
// @provider
type users struct{}
type UserItem struct {
*models.User
BoughtCount int64 `json:"bought_count"` // 用户已购作品数量(统计 user_posts 记录数,含赠送/免费购买)
}
// List users
//
// @Summary 用户列表
// @Tags Admin Users
// @Produce json
// @Param query query UserListQuery false "筛选条件"
// @Success 200 {object} requests.Pager{items=models.User} "成功"
// @Success 200 {object} requests.Pager{items=UserItem} "成功"
// @Router /admin/v1/users [get]
// @Bind query query
func (ctl *users) List(ctx fiber.Ctx, query *dto.UserListQuery) (*requests.Pager, error) {
return services.Users.List(ctx, query)
pager, err := services.Users.List(ctx, query)
if err != nil {
return nil, err
}
userIDs := lo.Map(pager.Items.([]*models.User), func(item *models.User, _ int) int64 {
return item.ID
})
if len(userIDs) == 0 {
return pager, nil
}
cntMap, err := services.Users.BoughtStatistics(ctx, userIDs)
if err != nil {
return pager, err
}
items := lo.Map(pager.Items.([]*models.User), func(item *models.User, _ int) UserItem {
cnt := int64(0)
if v, ok := cntMap[item.ID]; ok {
cnt = v
}
return UserItem{User: item, BoughtCount: cnt}
})
pager.Items = items
return pager, nil
}
// Show user