package tokenservicelogic import ( "app-cloudep-permission-server/internal/domain" ers "code.30cm.net/digimon/library-go/errors" "context" "app-cloudep-permission-server/gen_result/pb/permission" "app-cloudep-permission-server/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type GetUserTokensByUidLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewGetUserTokensByUidLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserTokensByUidLogic { return &GetUserTokensByUidLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } type getUserTokensByUidReq struct { UID string `json:"uid" validate:"required"` } // GetUserTokensByUid 取得目前所對應的 UID 所存在的 Tokens func (l *GetUserTokensByUidLogic) GetUserTokensByUid(in *permission.QueryTokenByUIDReq) (*permission.Tokens, error) { if err := l.svcCtx.Validate.ValidateAll(&getUserTokensByUidReq{ UID: in.GetUid(), }); err != nil { return nil, ers.InvalidFormat(err.Error()) } uidTokens, err := l.svcCtx.TokenRedisRepo.GetAccessTokensByUID(l.ctx, in.GetUid()) if err != nil { return nil, err } tokens := make([]*permission.TokenResp, 0, len(uidTokens)) for _, v := range uidTokens { tokens = append(tokens, &permission.TokenResp{ AccessToken: v.AccessToken, TokenType: domain.TokenTypeBearer, ExpiresIn: int32(v.ExpiresIn), RefreshToken: v.RefreshToken, }) } return &permission.Tokens{ Token: tokens, }, nil }