package logic import ( "context" "lone-services/pkg/utils" "lone-services/pkg/validate" user "lone-services/rpc/user/pb" "lone-services/services/user/internal/svc" "lone-services/services/user/validator" jsoniter "github.com/json-iterator/go" "github.com/zeromicro/go-zero/core/logx" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) type InternalLoginByUserIdLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewInternalLoginByUserIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InternalLoginByUserIdLogic { return &InternalLoginByUserIdLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *InternalLoginByUserIdLogic) InternalLoginByUserId(in *user.InternalLoginByUserIdReq) (*user.InternalLoginByUserIdData, error) { var req validator.InternalLoginByUserIdValidator if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty { return nil, status.Error(codes.InvalidArgument, msg) } client, err := loadEnabledClient(req.ClientCode) if err != nil { l.Errorf("internal login load client: %v", err) return nil, status.Error(codes.InvalidArgument, "端配置不存在或已禁用") } hasClient, err := userHasEnabledClient(req.UserId, req.ClientCode) if err != nil { l.Errorf("internal login check client: %v", err) return nil, status.Error(codes.Internal, utils.Fail.Msg) } if !hasClient { return nil, status.Error(codes.NotFound, utils.ErrorNotFund.Msg) } row, err := loadEnabledUser(req.UserId) if err != nil { l.Errorf("internal login load user: %v", err) return nil, status.Error(codes.NotFound, utils.ErrorNotFund.Msg) } token, err := issueLoginToken(l.ctx, l.svcCtx.JWT, row, client) if err != nil { l.Errorf("internal login issue token: %v", err) return nil, status.Error(codes.Internal, utils.Fail.Msg) } info, _ := jsoniter.MarshalToString(token.Info) return &user.InternalLoginByUserIdData{ AccessToken: token.AccessToken, RefreshToken: token.RefreshToken, Info: info, }, nil }