Merge pull request 'by Robin at 20240110; login add inviter field' (#54) from feat-20240109-001-Robin into test

Reviewed-on: #54
This commit is contained in:
chenhao 2024-01-10 23:20:04 +08:00
commit 0a63f58952
11 changed files with 51 additions and 9 deletions

View File

@ -38,6 +38,8 @@ var ErrCodeMsgMap = map[ErrCode]string{
ErrCodeAccountSrvFail: "账户服务错误",
ErrCodeAccountNotExist: "账户信息不存在",
ErrCodeAccountInviterNotExist: "邀请人不存在",
ErrCodeAccountInviterIsNotAStreamer: "邀请人非主播",
ErrCodeVasSrvFail: "增值服务错误",
ErrCodeVasProductNotExist: "商品不存在",
@ -191,6 +193,8 @@ const (
ErrCodeAccountSrvOk ErrCode = ErrCodeOk
ErrCodeAccountSrvFail ErrCode = -6001 //账户服务错误
ErrCodeAccountNotExist ErrCode = -6002 //账户信息不存在
ErrCodeAccountInviterNotExist ErrCode = -6003 //邀请人不存在,
ErrCodeAccountInviterIsNotAStreamer ErrCode = -6004 //邀请人非主播,
// Vas: 7xxx
ErrCodeVasSrvOk ErrCode = ErrCodeOk

View File

@ -75,6 +75,7 @@ type ApiLoginByVeriCodeReq struct {
base.BaseRequest
MobilePhoneInfoComponent `jcrypto:"true"`
VeriCodeComponent
Inviter *int64 `json:"inviter"`
}
type ApiLoginData struct {

View File

@ -75,6 +75,7 @@ type OpLoginByVeriCodeReq struct {
base.BaseRequest
MobilePhoneInfoComponent `jcrypto:"true"`
VeriCodeComponent
Inviter *int64 `json:"inviter"`
}
type OpLoginData struct {

View File

@ -123,7 +123,7 @@ func (s *Service) ApiLoginByVeriCode(ctx *gin.Context, req *loginproto.ApiLoginB
// 2.如果错误码是登录信息不存在,则判断为首次登录,将创建用户信息
if ec == errcode.ErrCodeLoginNotExist {
login, account, ec = s.utilRegisterUser(ctx, &req.MobilePhoneInfoComponent)
login, account, ec = s.utilRegisterUser(ctx, &req.MobilePhoneInfoComponent, req.Inviter)
if ec != errcode.ErrCodeLoginSrvOk {
logger.Error("utilRegisterUser failed")
ec = errcode.ErrCodeLoginRegisterUserFail

View File

@ -106,13 +106,26 @@ func (s *Service) ApiLoginByVeriCodeBusinessValidate(ctx *gin.Context, req *logi
// 2.如果错误码是登录信息不存在,则判断为首次登录,业务逻辑将创建用户信息
if ec == errcode.ErrCodeLoginNotExist {
vericode, _ = resultList[3].(*dbstruct.VeriCode)
if req.Inviter != nil {
inviter, err := _DefaultAccount.OpListByUserId(ctx, &accountproto.OpListByUserIdReq{
UserId: req.Inviter,
})
if err != nil || inviter == nil {
ec = errcode.ErrCodeAccountInviterNotExist
return
}
if util.DerefInt64(inviter.Role) != consts.Streamer {
ec = errcode.ErrCodeAccountInviterIsNotAStreamer
return
}
}
return
} else if ec == errcode.ErrCodeLoginSrvOk {
login, _ = resultList[1].(*dbstruct.Login)
account, _ = resultList[2].(*dbstruct.Account)
vericode, _ = resultList[3].(*dbstruct.VeriCode)
} else {
logger.Error("ApiLoginByPswd business validation failed!")
logger.Error("ApiLoginByVeriCode business validation failed!")
return
}
return

View File

@ -1,6 +1,7 @@
package service
import (
"service/api/consts"
"service/api/errcode"
accountproto "service/api/proto/account/proto"
accountrelationproto "service/api/proto/accountrelation/proto"
@ -18,6 +19,7 @@ import (
userwxaddcheckproto "service/api/proto/userwxaddcheck/proto"
vericodeproto "service/api/proto/vericode/proto"
businessvalidator "service/app/mix/service/business_validator"
"service/bizcommon/util"
"service/dbstruct"
"service/library/logger"
"service/library/mycrypto"
@ -112,6 +114,19 @@ func (s *Service) OpLoginByVeriCodeBusinessValidate(ctx *gin.Context, req *login
// 2.如果错误码是登录信息不存在,则判断为首次登录,将创建用户信息
if ec == errcode.ErrCodeLoginNotExist {
if req.Inviter != nil {
inviter, err := _DefaultAccount.OpListByUserId(ctx, &accountproto.OpListByUserIdReq{
UserId: req.Inviter,
})
if err != nil || inviter == nil {
ec = errcode.ErrCodeAccountInviterNotExist
return
}
if util.DerefInt64(inviter.Role) != consts.Streamer {
ec = errcode.ErrCodeAccountInviterIsNotAStreamer
return
}
}
return
} else if ec == errcode.ErrCodeLoginSrvOk {
login, _ = resultList[1].(*dbstruct.Login)

View File

@ -524,7 +524,7 @@ func (s *Service) OpLoginByVeriCode(ctx *gin.Context, req *loginproto.OpLoginByV
// 2.如果错误码是登录信息不存在,则判断为首次登录,将创建用户信息
if ec == errcode.ErrCodeLoginNotExist {
login, account, ec = s.utilRegisterUser(ctx, &req.MobilePhoneInfoComponent)
login, account, ec = s.utilRegisterUser(ctx, &req.MobilePhoneInfoComponent, req.Inviter)
if ec != errcode.ErrCodeLoginSrvOk {
logger.Error("utilRegisterUser failed")
ec = errcode.ErrCodeLoginRegisterUserFail

View File

@ -19,7 +19,7 @@ import (
// 不向外暴露的辅助公共函数
// 注册账户
func (s *Service) utilRegisterUser(ctx *gin.Context, req *loginproto.MobilePhoneInfoComponent) (login *dbstruct.Login, account *dbstruct.Account, ec errcode.ErrCode) {
func (s *Service) utilRegisterUser(ctx *gin.Context, req *loginproto.MobilePhoneInfoComponent, inviter *int64) (login *dbstruct.Login, account *dbstruct.Account, ec errcode.ErrCode) {
var err error
ec = errcode.ErrCodeLoginSrvOk
@ -44,6 +44,7 @@ func (s *Service) utilRegisterUser(ctx *gin.Context, req *loginproto.MobilePhone
account.MobilePhone = goproto.String(req.MobilePhone)
account.RegionCode = goproto.String(req.RegionCode)
account.PhoneHash = goproto.String(req.PhoneHash)
account.Inviter = inviter
// 创建账户生成mid
err = _DefaultAccount.OpCreate(ctx, &accountproto.OpCreateReq{

View File

@ -20,6 +20,7 @@ type Account struct {
IsDndModeEnabled *int64 `json:"is_dnd_mode_enabled" bson:"is_dnd_mode_enabled"` // 是否开启勿扰模式
GoldNum *int64 `json:"gold_num" bson:"gold_num"` // 金币数量
DiamondNum *int64 `json:"diamond_num" bson:"diamond_num"` // 钻石数量
Inviter *int64 `json:"inviter" bson:"inviter"` // 邀请人user_id
Latitude *float64 `bson:"latitude"` // 纬度
Longitude *float64 `bson:"longitude"` // 经度
Ct *int64 `json:"ct" bson:"ct"` // 创建时间

View File

@ -39,6 +39,9 @@ func (aesCrypto *AesCrypto) Encrypt(msg []byte) (encryptedBytes []byte, err erro
}
func (aesCrypto *AesCrypto) Decrypt(encryptedBytes []byte) (decryptedBytes []byte, err error) {
if len(encryptedBytes) == 0 {
return
}
//CBC解密
block, _ := aes.NewCipher(aesCrypto.aesPriKey) // 分组秘钥
blockSize := block.BlockSize() // 获取秘钥块的长度

View File

@ -39,6 +39,9 @@ func (rsaCrypto *RsaCrypto) Encrypt(msg []byte) (encryptedBytes []byte, err erro
}
func (rsaCrypto *RsaCrypto) Decrypt(encryptedBytes []byte) (decryptedBytes []byte, err error) {
if len(encryptedBytes) == 0 {
return
}
//私钥解密
decryptedBytes, err = rsa.DecryptPKCS1v15(rand.Reader, rsaCrypto.rsaPriKey, encryptedBytes)
if err != nil {