package analysisstorelogic import ( "context" "lone-services/pkg/utils" "lone-services/pkg/validate" analysis "lone-services/rpc/analysis/pb" userpb "lone-services/rpc/user/pb" "lone-services/services/analysis/internal/dao" "lone-services/services/analysis/internal/logic/common" "lone-services/services/analysis/internal/svc" "lone-services/services/analysis/validator" "github.com/zeromicro/go-zero/core/logx" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) type StoreAuthLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewStoreAuthLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StoreAuthLogic { return &StoreAuthLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *StoreAuthLogic) StoreAuth(in *analysis.StoreAuthReq) (*analysis.Response, error) { var req validator.StoreAuthValidator if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty { return common.OutResponse(utils.ErrorParams, msg), nil } storeId, _, fail := common.RequireStoreId(l.ctx) if fail != nil { return fail, nil } if l.svcCtx.UserSvcName == utils.StringEmpty { return common.FailResponse(utils.Fail), nil } cli, err := svc.GetRpcClient(l.svcCtx.UserSvcName) if err != nil { l.Errorf("store auth get user rpc: %v", err) return common.FailResponse(utils.Fail), nil } verified, err := userpb.NewUserClient(cli.Conn()).InternalVerifyPassword(l.ctx, &userpb.InternalVerifyPasswordReq{ Username: req.Username, Password: req.Password, SubjectType: "user", ClientCode: dao.ClientCodeUserSkin, }) if err != nil { l.Errorf("store auth verify password: %v", err) if st, ok := status.FromError(err); ok { switch st.Code() { case codes.NotFound: return common.FailResponse(utils.ErrorNotFund), nil case codes.InvalidArgument: return common.FailResponse(utils.ErrorPwdError), nil case codes.FailedPrecondition: return common.OutResponse(utils.Fail, st.Message()), nil } } return common.FailResponse(utils.Fail), nil } if verified == nil || verified.UserId < utils.NumberOne { return common.FailResponse(utils.ErrorNotFund), nil } if verified.BizId < utils.NumberOne { return common.OutResponse(utils.ErrorParams, "用户未开通"), nil } if err := common.BindStoreAuth(verified.BizId, storeId, req.ValidityTime); err != nil { l.Errorf("store auth bind: %v", err) return common.FailResponse(utils.Fail), nil } return common.OkResponse(map[string]int64{"user_id": verified.BizId}), nil }