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 CreateUserAccountLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewCreateUserAccountLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateUserAccountLogic { return &CreateUserAccountLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } type createUserAccountReq struct { LoginID string `validate:"required"` Token string `validate:"required"` } // CreateUserAccount 建立帳號與密碼 -> 可登入,但可不可以做其他事情看業務流程,也可以只註冊就好 func (l *CreateUserAccountLogic) CreateUserAccount(in *member.CreateLoginUserReq) (*member.OKResp, error) { // 驗證資料 if err := l.svcCtx.Validate.ValidateAll(&createUserAccountReq{ LoginID: in.GetLoginId(), Token: in.GetToken(), }); err != nil { return nil, errs.InvalidFormat(err.Error()) } toInt8, err := safeInt64ToInt8(in.GetPlatform()) if err != nil { return nil, err } platform := domain.Platform(toInt8) if platform.ToString() == "" { return nil, errs.InvalidFormat("platform not found") } err = l.svcCtx.AccountUseCase.CreateUserAccount(l.ctx, usecase.CreateLoginUserRequest{ LoginID: in.GetLoginId(), Platform: platform, Token: in.GetToken(), }) if err != nil { return nil, err } return &member.OKResp{}, nil } func safeInt64ToInt8(n int64) (int8, error) { if n < math.MinInt8 || n > math.MaxInt8 { return 0, fmt.Errorf("int64 value %d out of int8 range", n) } return int8(n), nil }