feat: 添加用户购买作品数量统计功能
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user