新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

registerlogic.go 3.8 KB
package login

import (
	"chainweaver.org.cn/chainweaver/did/did-mgr-common-service/errorcode"
	"chainweaver.org.cn/chainweaver/did/did-mgr-common-service/internal/db"
	"chainweaver.org.cn/chainweaver/did/did-mgr-common-service/internal/svc"
	"chainweaver.org.cn/chainweaver/did/did-mgr-common-service/internal/types"
	"chainweaver.org.cn/chainweaver/did/did-mgr-common-service/internal/utils"
	"context"
	"encoding/base64"
	"fmt"
	"time"

	"github.com/zeromicro/go-zero/core/logx"
)

type RegisterLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewRegisterLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RegisterLogic {
	return &RegisterLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

type TeCommonResp struct {
	Code int32       `json:"Code"`
	Msg  string      `json:"Msg"`
	Data interface{} `json:"Data"`
}

func (l *RegisterLogic) Register(req *types.RegisterReq) (resp *types.CommonResp, err error) {
	resp = &types.CommonResp{
		Code: int32(types.SucceedCode),
		Msg:  types.SucceedMsg,
	}
	// 密码检查
	pwd, internalErr := base64.StdEncoding.DecodeString(req.Password)
	if internalErr != nil {
		err = fmt.Errorf("password is not base64")
		errorcode.RequestErrorParameters.BuildResult(resp, err)
		l.Logger.Errorf("pwd=%s [%s] [%s]", req.Password, err.Error(), internalErr.Error())
		return resp, nil
	}
	req.Password = string(pwd)
	if internalErr = utils.CheckPasswordFormat(req.Password); internalErr != nil {
		err = fmt.Errorf("password is invalid")
		errorcode.RequestErrorParameters.BuildResult(resp, err)
		l.Logger.Errorf("pwd=%s [%s] [%s]", req.Password, err.Error(), internalErr.Error())
		return resp, nil
	}
	// 企业名格式检查
	if internalErr = utils.CheckUserNameFormat(req.EnterpriseName); internalErr != nil {
		err = fmt.Errorf("enterprise name is invalid")
		errorcode.RequestErrorParameters.BuildResult(resp, err)
		l.Logger.Errorf("enterprise name is invalid, username=%s", req.EnterpriseName)
		return resp, nil
	}
	// 手机号格式检查
	if internalErr = utils.CheckPhoneFormat(req.PhoneNumber); internalErr != nil {
		err = fmt.Errorf("phone number is invalid")
		errorcode.RequestErrorParameters.BuildResult(resp, err)
		l.Logger.Errorf("phone number is invalid, phone=%s", req.PhoneNumber)
		return resp, nil
	}
	// 保证只能不存在用户时,才能通过注册接口注册
	_, count, err := db.GetUserInfos("", 0, 10, 0)
	if count != 0 {
		errorcode.UserAlreadyExistError.BuildResult(resp)
		l.Logger.Errorf("already exist user,can not register, phone=%s", req.PhoneNumber)
		return resp, nil
	}
	// 用户是否存在检查
	userInfo, err := db.CheckUser(req.PhoneNumber, req.Password, int64(0))
	if userInfo != nil || err.Error() != "record not found" {
		l.Logger.Errorf("phone number has already used or happy err[%s]", err)
		errorcode.RegisterErrorPhoneNumberExist.BuildResult(resp)
		return resp, nil
	}

	//create enterprise
	enterprise := &db.EnterpriseInfo{
		EnterpriseCName:    req.EnterpriseName,
		PhoneNumber:        req.PhoneNumber,
		Email:              "",
		CertificationState: int(2),
		Remark:             "",
	}
	err = db.CreateTable(enterprise)
	if err != nil {
		errorcode.MysqlErrorInsertInfo.BuildResult(resp, err)
		l.Logger.Info("create enterprise info failed, phone=%s", req.PhoneNumber)
		return
	}
	password, _, _, err := utils.GetPwd(req.Password, "", -1)
	//create user
	userInfo = &db.UserInfo{
		EnterpriseID:   enterprise.EnterpriseID,
		EnterpriseName: "",
		PhoneNumber:    req.PhoneNumber,
		Password:       password,
		MemberType:     int(1),
		State:          int(1),
		StartTime:      time.Now(),
	}
	err = db.CreateTable(userInfo)
	if err != nil {
		errorcode.MysqlErrorInsertInfo.BuildResult(resp, err)
		l.Logger.Info("create user info failed, phone=%s", req.PhoneNumber)
		return resp, nil
	}

	return resp, nil
}