实现获取用户角色列表接口

This commit is contained in:
2025-06-19 19:47:34 +08:00
parent cd8ab0f7e8
commit d920cff499
10 changed files with 110 additions and 6 deletions

View File

@ -20,4 +20,5 @@ type IUserV1 interface {
GetBoundUrl(ctx context.Context, req *v1.GetBoundUrlReq) (res *v1.GetBoundUrlRes, err error)
GetUnboundUrl(ctx context.Context, req *v1.GetUnboundUrlReq) (res *v1.GetUnboundUrlRes, err error)
DelUser(ctx context.Context, req *v1.DelUserReq) (res *v1.DelUserRes, err error)
GetUserGameRoleList(ctx context.Context, req *v1.GetUserGameRoleListReq) (res *v1.GetUserGameRoleListRes, err error)
}

View File

@ -99,3 +99,14 @@ type DelUserReq struct {
type DelUserRes struct {
Success bool `json:"success" dc:"是否成功"`
}
type GetUserGameRoleListReq struct {
g.Meta `path:"/user/gameRoleList" method:"get" tags:"User" summary:"(PC)获取用户游戏角色列表"`
PopenId string `json:"popenId" v:"required#popenId不能为空" dc:"用户详情接口返回的 wxPopenId 或者是 qqPopenId"`
GameId int `json:"gameId" v:"required#gameId不能为空" dc:"游戏id"`
Area int `json:"area" v:"required#area不能为空" dc:"游戏区"`
BindType int `json:"bindType" v:"required|in:1,2#请选择绑定方式只能为1或2" dc:"绑定方式默认值11: qq; 2: wx" default:"1"`
}
type GetUserGameRoleListRes struct {
List interface{} `json:"list"`
}

View File

@ -12,4 +12,5 @@ const (
const (
GetNonLoginTaskList = "GetNonloginTaskList"
GetTaskList = "GetTaskList"
QueryUserRoleList = "QueryUserRoleList"
)

View File

@ -0,0 +1,17 @@
package user
import (
"context"
"server/internal/model"
"server/internal/service"
"server/api/user/v1"
)
func (c *ControllerV1) GetUserGameRoleList(ctx context.Context, req *v1.GetUserGameRoleListReq) (res *v1.GetUserGameRoleListRes, err error) {
out, err := service.User().GetUserGameRole(ctx, &model.GetUserGameRoleIn{BindType: req.BindType, GameId: req.GameId, PopenId: req.PopenId, Area: req.Area})
if err != nil {
return nil, err
}
return &v1.GetUserGameRoleListRes{List: out.RoleList}, nil
}

View File

@ -299,3 +299,17 @@ func (s *sUser) DelUser(ctx context.Context, in *model.DelUserIn) (out *model.De
return &model.DeleteOut{Success: true}, nil
}
func (s *sUser) GetUserGameRole(ctx context.Context, in *model.GetUserGameRoleIn) (out *model.GetUserGameRoleOut, err error) {
activity, err := gamelife.GetGamelifeClient(ctx).RequestActivity(ctx, &model.QQNetbarActivityIn{ServiceName: consts.QueryUserRoleList, PopenId: in.PopenId, BindType: in.BindType, UserRoleParam: model.UserRoleParam{Gid: in.GameId, Area: in.Area}})
if err != nil {
return nil, err
}
result, ok := activity.(*[]model.UserRole)
if !ok {
return nil, ecode.Fail.Sub("获取用户游戏角色失败")
}
return &model.GetUserGameRoleOut{
RoleList: *result,
}, nil
}

View File

@ -58,9 +58,21 @@ type TaskParam struct {
Source string `json:"source"`
}
type QQNetbarActivityIn struct {
ServiceName string // 服务名称
TaskParam TaskParam // 参数体
PopenId string
BindType int
type UserRoleParam struct {
Area int `json:"area,omitempty"` // 可选参数
Gid int `json:"gid"`
}
type UserRole struct {
RoleName string `json:"role_name"`
RoleIdx string `json:"roleIdx"`
}
type UserRoleListResponse struct {
RoleList []UserRole `json:"role_list"`
}
type QQNetbarActivityIn struct {
ServiceName string // 服务名称
TaskParam TaskParam // 参数体
UserRoleParam UserRoleParam
PopenId string
BindType int
}

View File

@ -183,3 +183,12 @@ type DelUserIn struct {
type DelUserOut struct {
Success bool
}
type GetUserGameRoleIn struct {
PopenId string
GameId int
BindType int
Area int
}
type GetUserGameRoleOut struct {
RoleList []UserRole
}

View File

@ -23,6 +23,7 @@ type (
UnBoundUrl(ctx context.Context, in *model.UserBoundUrlIn) (out *model.UserUnBoundUrlOut, err error)
BoundInfo(ctx context.Context, in *model.UserBoundInfoIn) (out *model.UserBoundInfoOut, err error)
DelUser(ctx context.Context, in *model.DelUserIn) (out *model.DeleteOut, err error)
GetUserGameRole(ctx context.Context, in *model.GetUserGameRoleIn) (out *model.GetUserGameRoleOut, err error)
}
)

View File

@ -346,6 +346,42 @@ func (s *gamelifeClient) RequestActivity(ctx context.Context, in *model.QQNetbar
return nil, ecode.Fail.Sub("请求出现异常")
}
return &result, nil
case consts.QueryUserRoleList:
cache, err := s.getOrRefreshCache(ctx, in.PopenId)
if err != nil {
return nil, err
}
cacheKey := fmt.Sprintf(consts.GameLifeUserKey, in.PopenId)
if cache.Params == "" {
// Reconstruct Params with default values
value, err := dao.Games.Ctx(ctx).Where(do.Games{GameId: in.UserRoleParam.Gid}).Fields(dao.Games.Columns().GameCode).Value()
if err != nil {
return nil, ecode.Fail.Sub("获取游戏名称失败")
}
cache.Params, err = s.buildQueryParams(ctx, in.PopenId, cache, value.String(), "", in.BindType, true)
if err != nil {
return nil, err
}
// Update cache with new Params
ttl, err := g.Redis().TTL(ctx, cacheKey)
if err != nil {
return nil, ecode.Fail.Sub("获取缓存过期时间失败")
}
if err := g.Redis().SetEX(ctx, cacheKey, cache, ttl); err != nil {
return nil, ecode.Fail.Sub("更新缓存失败")
}
}
var result model.UserRoleListResponse
resp, err := client.R().
SetContext(ctx).
SetBody(in.UserRoleParam).
SetResult(&result).
Post(fmt.Sprintf("%s%s?%s", taskURL, consts.QueryUserRoleList, cache.Params))
if err != nil || resp.IsError() {
return nil, ecode.Fail.Sub("请求出现异常")
}
return &result.RoleList, nil
default:
return nil, ecode.Fail.Sub(fmt.Sprintf("不支持的任务: %s", in.ServiceName))

View File

@ -56,14 +56,16 @@ func init() {
enforcer.AddPolicy("user", "/x/upload/image", "POST", "上传图片")
enforcer.AddPolicy("user", "/x/upload/user", "POST", "上传头像图片")
//
enforcer.AddPolicy("user", "/x/user", "PUT", "修改个人信息")
enforcer.AddPolicy("user", "/x/user/getPhoneCode", "POST", "获取验证码")
enforcer.AddPolicy("user", "/x/user/bindPhone", "POST", "绑定手机号")
enforcer.AddPolicy("user", "/x/user/info", "GET", "查询用户个人信息")
// 游戏人生
enforcer.AddPolicy("user", "/x/user/boundInfo", "GET", "查询用户绑定信息")
enforcer.AddPolicy("user", "/x/user/boundUrl", "GET", "获取用户绑定的URL")
enforcer.AddPolicy("user", "/x/user/unBoundUrl", "GET", "获取用户取消绑定的URL")
enforcer.AddPolicy("user", "/x/user/gameRoleList", "GET", "查询用户游戏角色列表")
// 反馈信息
enforcer.AddPolicy("user", "/x/feedback", "GET", "获取反馈信息列表")