uniugm/admin/apps/user/service/service_user.go

150 lines
4.1 KiB
Go
Raw Normal View History

2025-04-30 15:46:14 +08:00
package service
import (
"admin/apps/game/api"
apiUser "admin/apps/user/api"
"admin/apps/user/domain/entity"
"admin/apps/user/model"
"admin/internal/errcode"
2025-05-16 15:17:10 +08:00
dto2 "admin/internal/model/dto"
2025-04-30 15:46:14 +08:00
"admin/lib/tokenlib"
2025-05-14 18:09:20 +08:00
"admin/lib/xlog"
2025-04-30 15:46:14 +08:00
"context"
2025-05-19 17:51:09 +08:00
"time"
2025-04-30 15:46:14 +08:00
)
func (svc *Service) CheckToken(token string, userId int) error {
if err := tokenlib.ValidToken(token, userId); err != nil {
xlog.Warnf("valid token:%v user:%v error:%v", token, userId, err)
2025-04-30 15:46:14 +08:00
return err
}
dbToken := new(model.Token)
err := dbToken.GetByUserId(userId)
if err != nil {
return err
}
if token != dbToken.Token {
2025-05-14 18:09:20 +08:00
xlog.Infof("user:%v token invalid:(%v)(%v)",
dbToken.UserId, token, dbToken.Token)
2025-04-30 15:46:14 +08:00
return errcode.New(errcode.TokenInvalid, "token not equal:%v,%v", token, dbToken.Token)
}
return nil
}
func (svc *Service) Auth(ctx context.Context, req *apiUser.AuthReq) (*apiUser.AuthRsp, error) {
rsp := &apiUser.AuthRsp{}
err := svc.CheckToken(req.Token, req.UserId)
if err != nil {
return rsp, err
}
info, err := svc.GetUserInfo(req.UserId)
if err != nil {
return nil, err
}
rsp.User = &apiUser.UserInfo{
UserId: info.User.UserId,
2025-05-05 10:30:33 +08:00
UserName: info.User.NickName,
2025-04-30 15:46:14 +08:00
NickName: info.User.NickName,
Icon: info.User.Icon,
Character: info.User.Character,
Permissions: info.User.Permissions,
}
rsp.Token = &apiUser.TokenInfo{
Token: info.Token.Token,
ExpireAt: info.Token.ExpireAt,
}
return rsp, nil
}
2025-05-16 15:17:10 +08:00
func (svc *Service) Login(user, pwd string) (info *dto2.LoginRsp, err error) {
2025-04-30 15:46:14 +08:00
userInfo, err := svc.resourceSvc.Login(user, pwd)
if err != nil {
return nil, err
}
tokenInfo, err := svc.resourceSvc.GetOrCreateToken(userInfo.GetUserId())
if err != nil {
return nil, err
}
projectRoutesRsp, err := api.GetGameApiInstance().GetRoutes(&api.GetRoutesReq{IsAdmin: userInfo.IsAdmin(), Permissions: userInfo.GetPermissions()})
if err != nil {
return nil, err
}
2025-05-16 15:17:10 +08:00
info = &dto2.LoginRsp{}
2025-04-30 15:46:14 +08:00
info.User = userInfo.ToDtoInfo()
2025-05-16 15:17:10 +08:00
info.Token = &dto2.TokenInfo{Token: tokenInfo.Token, ExpireAt: tokenInfo.ExpireAt.Unix()}
2025-04-30 15:46:14 +08:00
info.ProjectsRoutes = projectRoutesRsp.Projects
return info, nil
}
2025-05-16 15:17:10 +08:00
func (svc *Service) GetUserInfo(userId int) (*dto2.GetUserInfoRsp, error) {
2025-04-30 15:46:14 +08:00
user, find, err := svc.GetUserById(userId)
if err != nil {
return nil, err
}
if !find {
return nil, errcode.New(errcode.NotLogin, "not found user by id:%v", userId)
}
tokenInfo, err := svc.resourceSvc.GetToken(user.GetUserId())
if err != nil {
return nil, err
}
projectRoutesRsp, err := api.GetGameApiInstance().GetRoutes(&api.GetRoutesReq{IsAdmin: user.IsAdmin(), Permissions: user.GetPermissions()})
if err != nil {
return nil, err
}
2025-05-16 15:17:10 +08:00
rsp := &dto2.GetUserInfoRsp{
2025-04-30 15:46:14 +08:00
User: user.ToDtoInfo(),
2025-05-16 15:17:10 +08:00
Token: &dto2.TokenInfo{Token: tokenInfo.Token, ExpireAt: tokenInfo.ExpireAt.Unix()},
2025-04-30 15:46:14 +08:00
ProjectsRoutes: projectRoutesRsp.Projects,
}
return rsp, nil
}
func (svc *Service) GetUserById(userId int) (*entity.User, bool, error) {
return svc.resourceSvc.GetUserById(userId)
}
2025-05-19 17:51:09 +08:00
func (svc *Service) ListUserExecHistory(params *dto2.ListUserOpHistoryReq) (*dto2.ListUserOpHistoryRsp, error) {
list, totalCount, err := new(model.History).List(params.PageNo, params.PageLen,
params.UserId, params.OpResourceType, params.OpResourceGroup, params.OpResourceKey, params.Method)
if err != nil {
return nil, err
}
rsp := new(dto2.ListUserOpHistoryRsp)
rsp.List = make([]*dto2.UserOpHistoryInfo, 0)
userMap := make(map[int]*entity.User, 0)
for _, v := range list {
var userName = v.UserName
userInfo, find := userMap[v.UserId]
if !find {
userInfo, find, err := svc.resourceSvc.GetUserById(v.UserId)
if err == nil && find {
userName = userInfo.Po.UserName
userMap[v.UserId] = userInfo
}
} else {
userName = userInfo.Po.UserName
}
rsp.List = append(rsp.List, &dto2.UserOpHistoryInfo{
UserId: v.UserId,
UserName: userName,
OpResourceType: v.OpResourceType,
OpResourceGroup: v.OpResourceGroup,
OpResourceKey: v.OpResourceKey,
Method: v.Method,
CreatedAt: v.CreatedAt.Format(time.DateTime),
DetailInfo: v.DetailInfo,
})
}
rsp.TotalCount = totalCount
return rsp, nil
}