package accountlogic import ( "context" "fmt" "math" domain "code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member" "code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase" "code.30cm.net/digimon/library-go/errs" "code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member" "code.30cm.net/digimon/app-cloudep-member-server/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type BindAccountLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewBindAccountLogic(ctx context.Context, svcCtx *svc.ServiceContext) *BindAccountLogic { return &BindAccountLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } type bindLoginUserReq struct { Account string `json:"account" validate:"account"` UID string `json:"uid" ` Type int64 `json:"type" validate:"required,oneof=1 2 3"` } // BindAccount 綁定帳號 -> account bind to UID func (l *BindAccountLogic) BindAccount(in *member.BindingUserReq) (*member.BindingUserResp, error) { // 驗證資料 if err := l.svcCtx.Validate.ValidateAll(&bindLoginUserReq{ Account: in.GetLoginId(), Type: in.GetType(), }); err != nil { return nil, errs.InvalidFormat(err.Error()) } s, err := safeInt64ToInt32(in.GetType()) if err != nil { return nil, err } account, err := l.svcCtx.AccountUseCase.BindAccount(l.ctx, usecase.BindingUser{ UID: in.GetUid(), LoginID: in.GetLoginId(), Type: domain.AccountType(s), }) if err != nil { return nil, err } return &member.BindingUserResp{ LoginId: account.LoginID, Uid: account.UID, Type: in.GetType(), }, nil } func safeInt64ToInt32(n int64) (int32, error) { if n < math.MinInt32 || n > math.MaxInt32 { return 0, fmt.Errorf("int64 value %d out of int8 range", n) } return int32(n), nil }