package accountlogic import ( "app-cloudep-member-server/internal/model" "context" "errors" "time" ers "code.30cm.net/digimon/library-go/errors" "github.com/go-sql-driver/mysql" "app-cloudep-member-server/gen_result/pb/member" "app-cloudep-member-server/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type BindUserInfoLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } type createUserInfo struct { Uid string `validate:"required"` VerifyType int32 `validate:"required,oneof=0 1 2 3"` AlarmType int32 `validate:"required,oneof=0 1 2"` Status int32 `validate:"required,oneof=1 2 3 4 5 6"` RoleId string `validate:"required"` Language string `validate:"required"` Currency string `validate:"required"` NickName string `validate:"required"` } func NewBindUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *BindUserInfoLogic { return &BindUserInfoLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } type createUserInfoReq struct { Uid string `validate:"required"` // 唯一辨識碼 Language string `validate:"required"` Currency string `validate:"required"` // VerifyType int32 `validate:"required,oneof=0 1 2 3 4"` // 驗證類型 0. 異常 [ 1.信箱 2.手機 3. GA 4. 關閉] 兩步驟驗證狀態 // AlarmType int32 `validate:"required,oneof=0 1 2"` // 告警狀態 0. 異常 1. 正常(未告警) 2.系統告警中 // Status int32 `validate:"required,oneof=1 2 3 4 5"` // 會員狀態 0. 異常 1. 尚未驗證 2. 啟用 3. 停權中 4. 信箱以驗證 5. 手機以驗證 // Language string // Currency string // NickName string // Avatar string // 會員頭像 } // BindUserInfo 初次,綁定 User Info func (l *BindUserInfoLogic) BindUserInfo(in *member.CreateUserInfoReq) (*member.OKResp, error) { // 驗證資料 if err := l.svcCtx.Validate.ValidateAll(&createUserInfoReq{ Uid: in.GetUid(), Language: in.GetLanguage(), Currency: in.GetCurrency(), }); err != nil { return nil, ers.InvalidFormat(err.Error()) } // 有些應為預設資料,不應該被新增 now := time.Now().UTC().Unix() if _, err := l.svcCtx.UserModel.Insert(l.ctx, &model.UserTable{ Uid: in.GetUid(), VerifyType: int64(member.VerifyType_VERIFY_NOT.Number()), // 預設為沒有設定兩步驟驗證 AlarmType: int64(member.AlarmType_ALARM_NOT.Number()), // 預設狀態為沒有被系統告警過 Status: int64(member.MemberStatus_STATUS_VERIFY.Number()), // 預設狀態為尚未驗證 Language: in.GetLanguage(), Currency: in.GetCurrency(), NickName: in.GetNickName(), Avatar: in.GetAvatar(), CreateTime: now, UpdateTime: now, }); err != nil { // 新增進去 var mysqlErr *mysql.MySQLError if errors.As(err, &mysqlErr) && mysqlErr.Number == 1062 { // 處理重複條目錯誤 return nil, ers.DBDuplicate(in.GetUid()) } return nil, ers.DBError(err.Error()) } return &member.OKResp{}, nil }