146 lines
3.7 KiB
Go
146 lines
3.7 KiB
Go
package usecase
|
||
|
||
import (
|
||
"app-cloudep-member-server/pkg/domain"
|
||
"app-cloudep-member-server/pkg/domain/entity"
|
||
"app-cloudep-member-server/pkg/domain/usecase"
|
||
"context"
|
||
"errors"
|
||
"fmt"
|
||
|
||
"code.30cm.net/digimon/library-go/errs"
|
||
"code.30cm.net/digimon/library-go/errs/code"
|
||
"github.com/zeromicro/go-zero/core/logx"
|
||
"github.com/zeromicro/go-zero/core/stores/mon"
|
||
)
|
||
|
||
func (use *MemberUseCase) BindUserInfo(ctx context.Context, req usecase.CreateUserInfoRequest) error {
|
||
// prepare 準備資料
|
||
// 準備資料
|
||
insert := &entity.User{
|
||
UID: req.UID,
|
||
AvatarURL: req.AvatarURL,
|
||
FullName: req.FullName,
|
||
Nickname: req.Nickname,
|
||
GenderCode: req.GenderCode,
|
||
Birthdate: req.Birthdate,
|
||
Address: req.Address,
|
||
AlarmCategory: req.AlarmCategory,
|
||
UserStatus: req.UserStatus,
|
||
PreferredLanguage: req.PreferredLanguage,
|
||
Currency: req.Currency,
|
||
}
|
||
|
||
// Insert 新增
|
||
if err := use.User.Insert(ctx, insert); err != nil {
|
||
e := errs.DatabaseErrorWithScopeL(
|
||
code.CloudEPMember,
|
||
domain.BindingUserTabletErrorCode,
|
||
logx.WithContext(ctx),
|
||
[]logx.LogField{
|
||
{Key: "req", Value: req},
|
||
{Key: "func", Value: "User.Insert"},
|
||
{Key: "err", Value: err.Error()},
|
||
},
|
||
"failed to binding user info").Wrap(err)
|
||
|
||
return e
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func (use *MemberUseCase) BindAccount(ctx context.Context, req usecase.BindingUser) (usecase.BindingUser, error) {
|
||
// 先確定有這個Account
|
||
_, err := use.Account.FindOneByAccount(ctx, req.LoginID)
|
||
if err != nil {
|
||
var e *errs.LibError
|
||
switch {
|
||
case errors.Is(err, mon.ErrNotFound):
|
||
e = errs.ResourceNotFoundWithScope(
|
||
code.CloudEPMember,
|
||
domain.FailedToFindAccountErrorCode,
|
||
fmt.Sprintf("failed to insert account: %s", req.UID),
|
||
)
|
||
default:
|
||
e = errs.DatabaseErrorWithScopeL(
|
||
code.CloudEPMember,
|
||
domain.FailedToFindAccountErrorCode,
|
||
logx.WithContext(ctx),
|
||
[]logx.LogField{
|
||
{Key: "req", Value: req},
|
||
{Key: "func", Value: "User.FindOneByAccount"},
|
||
{Key: "err", Value: err.Error()},
|
||
},
|
||
"failed to find account").Wrap(err)
|
||
}
|
||
|
||
return usecase.BindingUser{}, e
|
||
}
|
||
|
||
uid := req.UID
|
||
// 有帳號,沒UID 表示他是要產生一個新的UID,產一個給他
|
||
if req.UID == "" {
|
||
uid, err = use.Generate(ctx)
|
||
if err != nil {
|
||
// generate 裡面會產生 error
|
||
// usecase 印出錯誤其中一個準則,在最基底的 uc 裡面印錯誤
|
||
return usecase.BindingUser{}, err
|
||
}
|
||
}
|
||
if err := use.AccountUID.Insert(ctx, &entity.AccountUID{
|
||
LoginID: req.LoginID,
|
||
UID: uid,
|
||
Type: req.Type,
|
||
}); err != nil {
|
||
e := errs.DatabaseErrorWithScopeL(
|
||
code.CloudEPMember,
|
||
domain.FailedToBindAccountErrorCode,
|
||
logx.WithContext(ctx),
|
||
[]logx.LogField{
|
||
{Key: "req", Value: req},
|
||
{Key: "func", Value: "User.Insert"},
|
||
{Key: "err", Value: err.Error()},
|
||
},
|
||
"failed to bind account").Wrap(err)
|
||
|
||
return usecase.BindingUser{}, e
|
||
}
|
||
|
||
return usecase.BindingUser{
|
||
LoginID: req.LoginID,
|
||
UID: uid,
|
||
Type: req.Type,
|
||
}, nil
|
||
}
|
||
|
||
func (use *MemberUseCase) BindVerifyEmail(ctx context.Context, uid, email string) error {
|
||
err := use.User.UpdateEmailVerifyStatus(ctx, uid, email)
|
||
if err != nil {
|
||
e := errs.DatabaseErrorWithScope(
|
||
code.CloudEPMember,
|
||
domain.FailedToFindAccountErrorCode,
|
||
fmt.Sprintf("failed to Binding uid: %s, email: %s", uid, email),
|
||
)
|
||
|
||
return e
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func (use *MemberUseCase) BindVerifyPhone(ctx context.Context, uid, phone string) error {
|
||
err := use.User.UpdatePhoneVerifyStatus(ctx, uid, phone)
|
||
if err != nil {
|
||
e := errs.DatabaseErrorWithScope(
|
||
code.CloudEPMember,
|
||
domain.FailedToFindAccountErrorCode,
|
||
fmt.Sprintf("failed to Binding uid: %s, phone: %s", uid, phone),
|
||
)
|
||
|
||
return e
|
||
}
|
||
|
||
return nil
|
||
}
|