fix: internal user
CI / changes (push) Successful in 40s
CI / ad (push) Successful in 0s
CI / admin (push) Successful in 0s
CI / bff (push) Successful in 24s
CI / chore (push) Successful in 23s
CI / equipment (push) Successful in 1s
CI / express (push) Successful in 0s
CI / factory (push) Successful in 0s
CI / payment (push) Successful in 1s
CI / product (push) Successful in 0s
CI / record (push) Successful in 0s
CI / sale (push) Successful in 23s
CI / task (push) Successful in 0s
CI / user (push) Successful in 24s
CI / wecom (push) Successful in 0s
CI / changes (push) Successful in 40s
CI / ad (push) Successful in 0s
CI / admin (push) Successful in 0s
CI / bff (push) Successful in 24s
CI / chore (push) Successful in 23s
CI / equipment (push) Successful in 1s
CI / express (push) Successful in 0s
CI / factory (push) Successful in 0s
CI / payment (push) Successful in 1s
CI / product (push) Successful in 0s
CI / record (push) Successful in 0s
CI / sale (push) Successful in 23s
CI / task (push) Successful in 0s
CI / user (push) Successful in 24s
CI / wecom (push) Successful in 0s
This commit is contained in:
@@ -14,6 +14,8 @@ import (
|
||||
"lone-services/services/sale/validator"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
type CreateLogic struct {
|
||||
@@ -44,24 +46,29 @@ func (l *CreateLogic) Create(in *sale.CreateReq) (*sale.Response, error) {
|
||||
return failResponse(utils.ErrorNoLoginInfo), nil
|
||||
}
|
||||
|
||||
identity, idErr := ensureSaleIdentity(l.ctx, l.svcCtx.UserSvcName, req.Mobile, req.Password)
|
||||
if idErr != nil {
|
||||
l.Errorf("sale ensure identity: %v", idErr)
|
||||
if msg, ok := userRPCError(idErr); ok {
|
||||
if err := checkSaleIdentityCreatable(l.ctx, l.svcCtx.UserSvcName, req.Mobile); err != nil {
|
||||
l.Errorf("sale check identity: %v", err)
|
||||
if st, ok := status.FromError(err); ok && st.Code() == codes.AlreadyExists {
|
||||
return failResponse(utils.ErrorDataIsExist), nil
|
||||
}
|
||||
if msg, ok := userRPCError(err); ok {
|
||||
return outResponse(utils.Fail, msg), nil
|
||||
}
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
if identity.GetUserId() < utils.NumberOne || identity.GetMobile() == utils.StringEmpty {
|
||||
return failResponse(utils.Fail), nil
|
||||
|
||||
encryptMobile, encErr := utils.EncryptPhone(req.Mobile)
|
||||
if encErr != nil {
|
||||
l.Errorf("sale create encrypt mobile: %v", encErr)
|
||||
return failResponse(utils.ErrorEncryptAesError), nil
|
||||
}
|
||||
|
||||
m := model.SaleModel{}.Init()
|
||||
var existing dao.SaleStatusUpdate
|
||||
if err := m.GetOne(modelbase.Params{
|
||||
Eq: map[string]string{"user_id": strconv.FormatInt(identity.GetUserId(), utils.NumberTen)},
|
||||
Eq: map[string]string{"mobile": encryptMobile},
|
||||
}, &existing); err != nil {
|
||||
l.Errorf("sale create check user_id: %v", err)
|
||||
l.Errorf("sale create check mobile: %v", err)
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
if existing.Id > utils.NumberZero {
|
||||
@@ -96,9 +103,9 @@ func (l *CreateLogic) Create(in *sale.CreateReq) (*sale.Response, error) {
|
||||
}
|
||||
|
||||
data := dao.SaleCreate{
|
||||
UserId: identity.GetUserId(),
|
||||
UserId: utils.NumberZero,
|
||||
SaleId: req.SaleId,
|
||||
Mobile: identity.GetMobile(),
|
||||
Mobile: encryptMobile,
|
||||
Name: req.Name,
|
||||
IdCardFront: req.IdCardFront,
|
||||
IdCardBack: req.IdCardBack,
|
||||
@@ -124,5 +131,37 @@ func (l *CreateLogic) Create(in *sale.CreateReq) (*sale.Response, error) {
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
|
||||
identity, idErr := ensureSaleIdentity(l.ctx, l.svcCtx.UserSvcName, req.Mobile, req.Password, data.Id)
|
||||
if idErr != nil {
|
||||
l.Errorf("sale ensure identity: %v", idErr)
|
||||
if _, delErr := m.Del(modelbase.Params{
|
||||
Eq: map[string]string{"id": strconv.FormatInt(data.Id, utils.NumberTen)},
|
||||
}, &dao.SaleCreate{}); delErr != nil {
|
||||
l.Errorf("sale rollback after identity fail: %v", delErr)
|
||||
}
|
||||
if msg, ok := userRPCError(idErr); ok {
|
||||
return outResponse(utils.Fail, msg), nil
|
||||
}
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
if identity.GetUserId() < utils.NumberOne || identity.GetMobile() == utils.StringEmpty {
|
||||
if _, delErr := m.Del(modelbase.Params{
|
||||
Eq: map[string]string{"id": strconv.FormatInt(data.Id, utils.NumberTen)},
|
||||
}, &dao.SaleCreate{}); delErr != nil {
|
||||
l.Errorf("sale rollback after empty identity: %v", delErr)
|
||||
}
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
|
||||
if _, err := m.Edit(modelbase.Params{
|
||||
Eq: map[string]string{"id": strconv.FormatInt(data.Id, utils.NumberTen)},
|
||||
}, map[string]interface{}{
|
||||
"user_id": identity.GetUserId(),
|
||||
"mobile": identity.GetMobile(),
|
||||
}); err != nil {
|
||||
l.Errorf("sale bind user_id: %v", err)
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
|
||||
return okResponse(nil), nil
|
||||
}
|
||||
|
||||
@@ -7,12 +7,30 @@ import (
|
||||
"lone-services/pkg/utils"
|
||||
userpb "lone-services/rpc/user/pb"
|
||||
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
const saleClientCode = "sale_beauty"
|
||||
|
||||
func ensureSaleIdentity(ctx context.Context, userSvcName, mobile, password string) (*userpb.InternalCreateData, error) {
|
||||
func checkSaleIdentityCreatable(ctx context.Context, userSvcName, mobile string) error {
|
||||
cli, err := rpcclient.Get(userSvcName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
res, err := userpb.NewUserClient(cli.Conn()).InternalCheckCreate(ctx, &userpb.InternalCheckCreateReq{
|
||||
Mobile: mobile,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if res == nil || !res.GetResult() {
|
||||
return status.Error(codes.AlreadyExists, utils.ErrorDataIsExist.Msg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ensureSaleIdentity(ctx context.Context, userSvcName, mobile, password string, bizId int64) (*userpb.InternalCreateData, error) {
|
||||
cli, err := rpcclient.Get(userSvcName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -22,6 +40,7 @@ func ensureSaleIdentity(ctx context.Context, userSvcName, mobile, password strin
|
||||
ClientCode: []string{saleClientCode},
|
||||
CredentialType: []string{"password"},
|
||||
Secret: password,
|
||||
BizId: bizId,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -48,7 +67,7 @@ func revokeSaleUserClient(ctx context.Context, userSvcName string, userId int64)
|
||||
}
|
||||
|
||||
func reopenSaleUserClient(ctx context.Context, userSvcName, mobile string) (*userpb.InternalCreateData, error) {
|
||||
return ensureSaleIdentity(ctx, userSvcName, mobile, utils.StringEmpty)
|
||||
return ensureSaleIdentity(ctx, userSvcName, mobile, utils.StringEmpty, utils.NumberZero)
|
||||
}
|
||||
|
||||
func userRPCError(err error) (string, bool) {
|
||||
|
||||
Reference in New Issue
Block a user