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

108 lines
2.7 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/apps/user/model/dto"
"admin/internal/errcode"
"admin/lib/tokenlib"
"context"
)
func (svc *Service) CheckToken(token string, userId int) error {
if err := tokenlib.ValidToken(token, userId); err != nil {
return err
}
dbToken := new(model.Token)
err := dbToken.GetByUserId(userId)
if err != nil {
return err
}
if token != dbToken.Token {
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,
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
}
func (svc *Service) Login(user, pwd string) (info *dto.LoginRsp, err error) {
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
}
info = &dto.LoginRsp{}
info.User = userInfo.ToDtoInfo()
info.Token = &dto.TokenInfo{Token: tokenInfo.Token, ExpireAt: tokenInfo.ExpireAt.Unix()}
info.ProjectsRoutes = projectRoutesRsp.Projects
return info, nil
}
func (svc *Service) GetUserInfo(userId int) (*dto.GetUserInfoRsp, error) {
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
}
rsp := &dto.GetUserInfoRsp{
User: user.ToDtoInfo(),
Token: &dto.TokenInfo{Token: tokenInfo.Token, ExpireAt: tokenInfo.ExpireAt.Unix()},
ProjectsRoutes: projectRoutesRsp.Projects,
}
return rsp, nil
}
func (svc *Service) GetUserById(userId int) (*entity.User, bool, error) {
return svc.resourceSvc.GetUserById(userId)
}