Files
juwan-backend/app/player/api/internal/logic/player/listPlayersLogic.go
T

130 lines
3.4 KiB
Go

// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package player
import (
"context"
"encoding/json"
"strconv"
"time"
"juwan-backend/app/player/api/internal/svc"
"juwan-backend/app/player/api/internal/types"
"juwan-backend/app/player/rpc/pb"
"juwan-backend/app/users/rpc/usercenter"
"github.com/zeromicro/go-zero/core/logx"
)
type ListPlayersLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取打手列表
func NewListPlayersLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListPlayersLogic {
return &ListPlayersLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *ListPlayersLogic) ListPlayers(req *types.PlayerListReq) (resp *types.PlayerListResp, err error) {
p, err := l.svcCtx.PlayerRpc.SearchPlayers(l.ctx, &pb.SearchPlayersReq{
Offset: &req.Offset,
Limit: &req.Limit,
Gender: &req.Gender,
})
if err != nil {
return nil, err
}
if len(p.Players) == 0 {
return &types.PlayerListResp{Items: []types.PlayerProfile{}}, nil
}
userIds := make([]int64, 0, len(p.Players))
for _, v := range p.Players {
userIds = append(userIds, v.UserId)
}
usersResp, err := l.svcCtx.UserRpc.GetUsersByIds(l.ctx, &usercenter.GetUsersByIdsReq{Ids: userIds})
if err != nil {
return nil, err
}
userMap := make(map[int64]*usercenter.Users, len(usersResp.Users))
for _, u := range usersResp.Users {
userMap[u.Id] = u
}
list := make([]types.PlayerProfile, 0, len(p.Players))
for _, v := range p.Players {
profile := types.PlayerProfile{
Id: v.Id,
Rating: v.Rating,
TotalOrders: v.TotalOrders,
Status: v.Status,
Gender: v.Gender,
Services: []types.PlayerService{},
Tags: append([]string{}, v.Tags...),
}
games := make([]string, 0, len(v.Games))
for _, gameID := range v.Games {
games = append(games, strconv.FormatInt(gameID, 10))
}
profile.Games = games
if v.ShopId != 0 {
profile.ShopId = strconv.FormatInt(v.ShopId, 10)
}
if u, ok := userMap[v.UserId]; ok {
verificationStatus := map[string]string{}
if u.VerificationStatus != "" {
_ = json.Unmarshal([]byte(u.VerificationStatus), &verificationStatus)
}
profile.User = types.UserProfile{
Id: strconv.FormatInt(u.Id, 10),
Username: u.Username,
Nickname: u.Nickname,
Avatar: u.Avatar,
Role: u.CurrentRole,
VerifiedRoles: append([]string{}, u.VerifiedRoles...),
VerificationStatus: verificationStatus,
Phone: u.Phone,
Bio: u.Bio,
CreatedAt: time.Unix(u.CreatedAt, 0).Format(time.DateTime),
}
}
svcResp, svcErr := l.svcCtx.PlayerRpc.SearchPlayerServices(l.ctx, &pb.SearchPlayerServicesReq{
PlayerId: v.Id,
Limit: 100,
})
if svcErr != nil {
logx.Errorf("ListPlayers SearchPlayerServices player=%d err: %v", v.Id, svcErr)
} else {
for _, s := range svcResp.PlayerServices {
profile.Services = append(profile.Services, types.PlayerService{
Id: s.Id,
PlayerId: s.PlayerId,
GameId: s.GameId,
Title: s.Title,
Description: s.Description,
Price: s.Price,
Unit: s.Unit,
RankRange: s.RankRange,
Availability: s.Availability,
})
}
}
list = append(list, profile)
}
return &types.PlayerListResp{Items: list}, nil
}