feat: fix package name
This commit is contained in:
parent
0917885c1e
commit
040cc16b8e
|
@ -9,12 +9,6 @@ message OKResp {}
|
||||||
message NoneReq {}
|
message NoneReq {}
|
||||||
|
|
||||||
// ================ enum ================
|
// ================ enum ================
|
||||||
enum VerifyType {
|
|
||||||
VERIFY_NONE = 0; // 初始(異常)
|
|
||||||
VERIFY_OK = 1;
|
|
||||||
VERIFY_NOT = 2; // 尚未
|
|
||||||
}
|
|
||||||
|
|
||||||
enum AlarmType {
|
enum AlarmType {
|
||||||
ALARM_NONE = 0; // 初始(異常)
|
ALARM_NONE = 0; // 初始(異常)
|
||||||
ALARM_NOT = 1; // 未告警
|
ALARM_NOT = 1; // 未告警
|
||||||
|
@ -61,19 +55,18 @@ message BindingUserResp {
|
||||||
|
|
||||||
message CreateUserInfoReq {
|
message CreateUserInfoReq {
|
||||||
string uid = 1;
|
string uid = 1;
|
||||||
VerifyType verify_type = 2;
|
AlarmType alarm_type = 2;
|
||||||
AlarmType alarm_type = 3;
|
MemberStatus status = 3;
|
||||||
MemberStatus status = 4;
|
string language = 4;
|
||||||
string language = 5;
|
string currency = 5;
|
||||||
string currency = 6;
|
optional string avatar= 6;
|
||||||
optional string avatar= 7;
|
optional string nick_name = 7;
|
||||||
optional string nick_name = 8;
|
optional string full_name = 8;
|
||||||
optional string full_name = 9;
|
optional int64 gender = 9;
|
||||||
optional int64 gender = 10;
|
optional int64 birthdate = 10;
|
||||||
optional int64 birthdate = 11;
|
optional string phone_number = 11;
|
||||||
optional string phone_number = 12;
|
optional string email = 12;
|
||||||
optional string email = 13;
|
optional string address = 13;
|
||||||
optional string address = 14;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetAccountInfoResp {
|
message GetAccountInfoResp {
|
||||||
|
@ -87,15 +80,12 @@ message UpdateUserInfoReq {
|
||||||
optional string currency = 3;
|
optional string currency = 3;
|
||||||
optional string nick_name = 4;
|
optional string nick_name = 4;
|
||||||
optional string avatar = 5;
|
optional string avatar = 5;
|
||||||
optional VerifyType verify_type = 6;
|
optional AlarmType alarm_type = 6;
|
||||||
optional AlarmType alarm_type = 7;
|
optional MemberStatus status = 7;
|
||||||
optional MemberStatus status = 8;
|
optional string full_name = 8;
|
||||||
optional string full_name = 9;
|
optional int64 gender = 9;
|
||||||
optional int64 gender = 10;
|
optional int64 birthdate = 10;
|
||||||
optional int64 birthdate = 11;
|
optional string address = 11;
|
||||||
optional string phone_number = 12;
|
|
||||||
optional string email = 13;
|
|
||||||
optional string address = 14;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetUIDByAccountReq {
|
message GetUIDByAccountReq {
|
||||||
|
@ -144,15 +134,20 @@ message GetUserInfoReq {
|
||||||
|
|
||||||
message UserInfo {
|
message UserInfo {
|
||||||
string uid = 1;
|
string uid = 1;
|
||||||
VerifyType verify_type = 2;
|
optional string avatar_url = 2;
|
||||||
AlarmType alarm_type = 3;
|
optional string full_name = 3;
|
||||||
MemberStatus status = 4;
|
optional string nick_name = 4;
|
||||||
string language = 5;
|
optional int64 gender_code = 5;
|
||||||
string currency = 6;
|
optional int64 birthday = 6;
|
||||||
string avatar = 7;
|
optional string phone =7;
|
||||||
int64 create_time=8;
|
optional string email=8;
|
||||||
int64 update_time=9;
|
optional string address=9;
|
||||||
optional string nick_name = 10;
|
AlarmType alarm_type = 10;
|
||||||
|
MemberStatus status = 11;
|
||||||
|
string language = 12;
|
||||||
|
string currency = 13;
|
||||||
|
int64 create_time=14;
|
||||||
|
int64 update_time=15;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetUserInfoResp {
|
message GetUserInfoResp {
|
||||||
|
@ -160,13 +155,12 @@ message GetUserInfoResp {
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListUserInfoReq {
|
message ListUserInfoReq {
|
||||||
optional VerifyType verify_type = 1;
|
optional AlarmType alarm_type = 1;
|
||||||
optional AlarmType alarm_type = 2;
|
optional MemberStatus status = 2;
|
||||||
optional MemberStatus status = 3;
|
optional int64 create_start_time = 3;
|
||||||
optional int64 create_start_time = 4;
|
optional int64 create_end_time = 4;
|
||||||
optional int64 create_end_time = 5;
|
int64 page_size =5;
|
||||||
int64 page_size =6;
|
int64 page_index=6;
|
||||||
int64 page_index=7;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListUserInfoResp {
|
message ListUserInfoResp {
|
||||||
|
@ -183,6 +177,19 @@ message VerifyAuthResultResp {
|
||||||
bool status = 1;
|
bool status = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message VerifyGoogleAuthResultResp {
|
||||||
|
bool status = 1;
|
||||||
|
optional string iss =2; // 發行者 (issuer) 通常為 "https://accounts.google.com"
|
||||||
|
optional string sub =3; // 使用者唯一 ID
|
||||||
|
optional string aud =4; // Audience,應該與你的 Client ID 匹配
|
||||||
|
optional string exp =5; // 過期時間 (UNIX timestamp)
|
||||||
|
optional string iat =6; // 發行時間 (UNIX timestamp)
|
||||||
|
optional string email =7; // 使用者的電子郵件
|
||||||
|
optional string email_verified =8; // 郵件是否已驗證
|
||||||
|
optional string name =9; // 使用者的名稱
|
||||||
|
optional string picture =10; // 使用者的頭像 URL
|
||||||
|
}
|
||||||
|
|
||||||
message TwitterAccessTokenResp {
|
message TwitterAccessTokenResp {
|
||||||
string token = 1;
|
string token = 1;
|
||||||
}
|
}
|
||||||
|
@ -201,8 +208,18 @@ message LineAccessTokenResp {
|
||||||
}
|
}
|
||||||
|
|
||||||
message LineUserProfile {
|
message LineUserProfile {
|
||||||
string name = 1;
|
string display_name = 1;
|
||||||
string email = 2;
|
string user_id = 2;
|
||||||
|
string picture_url = 3;
|
||||||
|
string status_message = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message LineGetTokenReq {
|
||||||
|
string code = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message LineGetUserInfoReq {
|
||||||
|
string token = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
service Account {
|
service Account {
|
||||||
|
@ -237,12 +254,12 @@ service Account {
|
||||||
// CheckRefreshCode 驗證忘記密碼 token 不刪除,只確認)
|
// CheckRefreshCode 驗證忘記密碼 token 不刪除,只確認)
|
||||||
rpc CheckRefreshCode(VerifyRefreshCodeReq) returns(OKResp);
|
rpc CheckRefreshCode(VerifyRefreshCodeReq) returns(OKResp);
|
||||||
// VerifyGoogleAuthResult 驗證 google 登入是否有效
|
// VerifyGoogleAuthResult 驗證 google 登入是否有效
|
||||||
rpc VerifyGoogleAuthResult(VerifyAuthResultReq)returns(VerifyAuthResultResp);
|
rpc VerifyGoogleAuthResult(VerifyAuthResultReq)returns(VerifyGoogleAuthResultResp);
|
||||||
// VerifyPlatformAuthResult 驗證 google 登入是否有效
|
// VerifyPlatformAuthResult 驗證 google 登入是否有效
|
||||||
rpc VerifyPlatformAuthResult(VerifyAuthResultReq)returns(VerifyAuthResultResp);
|
rpc VerifyPlatformAuthResult(VerifyAuthResultReq)returns(VerifyAuthResultResp);
|
||||||
// LineCodeToAccessToken Line 驗證相關
|
// LineCodeToAccessToken Line 驗證相關
|
||||||
rpc LineCodeToAccessToken(NoneReq) returns (LineAccessTokenResp);
|
rpc LineCodeToAccessToken(LineGetTokenReq) returns (LineAccessTokenResp);
|
||||||
// LineGetProfileByAccessToken Line 驗證相關
|
// LineGetProfileByAccessToken Line 驗證相關
|
||||||
rpc LineGetProfileByAccessToken(NoneReq) returns (LineUserProfile);
|
rpc LineGetProfileByAccessToken(LineGetUserInfoReq) returns (LineUserProfile);
|
||||||
}
|
}
|
||||||
// ================ account ================
|
// ================ account ================
|
|
@ -4,13 +4,11 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/cache"
|
"github.com/zeromicro/go-zero/core/stores/cache"
|
||||||
"github.com/zeromicro/go-zero/core/stores/redis"
|
|
||||||
"github.com/zeromicro/go-zero/zrpc"
|
"github.com/zeromicro/go-zero/zrpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
zrpc.RpcServerConf
|
zrpc.RpcServerConf
|
||||||
redis.RedisConf
|
|
||||||
// Redis Cluster
|
// Redis Cluster
|
||||||
Cache cache.CacheConf
|
Cache cache.CacheConf
|
||||||
CacheExpireTime time.Duration
|
CacheExpireTime time.Duration
|
||||||
|
|
|
@ -44,43 +44,30 @@ func (l *BindAccountLogic) BindAccount(in *member.BindingUserReq) (*member.Bindi
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return nil, errs.InvalidFormat(err.Error())
|
return nil, errs.InvalidFormat(err.Error())
|
||||||
}
|
}
|
||||||
|
s, err := safeInt64ToInt32(in.GetType())
|
||||||
// 先確定有這個Account
|
|
||||||
if _, err := l.svcCtx.AccountUseCase.GetUserAccountInfo(l.ctx, usecase.GetUIDByAccountRequest{Account: in.GetLoginId()}); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var err error
|
|
||||||
uid := in.GetUid()
|
|
||||||
// 有 UID 綁看看,沒帶UID 近來,確認沒重複就直接綁一個給他
|
|
||||||
if in.GetUid() == "" {
|
|
||||||
uid, err = l.svcCtx.AccountUseCase.Generate(l.ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
t, err := int64ToInt32Safe(in.GetType())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if _, err := l.svcCtx.AccountUseCase.BindAccount(l.ctx, usecase.BindingUser{
|
account, err := l.svcCtx.AccountUseCase.BindAccount(l.ctx, usecase.BindingUser{
|
||||||
LoginID: in.LoginId,
|
UID: in.GetUid(),
|
||||||
UID: uid,
|
LoginID: in.GetLoginId(),
|
||||||
Type: domain.AccountType(t),
|
Type: domain.AccountType(s),
|
||||||
}); err != nil {
|
})
|
||||||
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &member.BindingUserResp{
|
return &member.BindingUserResp{
|
||||||
LoginId: in.LoginId,
|
LoginId: account.LoginID,
|
||||||
Uid: uid,
|
Uid: account.UID,
|
||||||
Type: in.GetType(),
|
Type: in.GetType(),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func int64ToInt32Safe(value int64) (int32, error) {
|
func safeInt64ToInt32(n int64) (int32, error) {
|
||||||
if value > math.MaxInt32 || value < math.MinInt32 {
|
if n < math.MinInt32 || n > math.MaxInt32 {
|
||||||
return 0, fmt.Errorf("value %d is out of int32 range", value)
|
return 0, fmt.Errorf("int64 value %d out of int8 range", n)
|
||||||
}
|
}
|
||||||
return int32(value), nil
|
|
||||||
|
return int32(n), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,11 @@ import (
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
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"
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BindUserInfoLogic struct {
|
type BindUserInfoLogic struct {
|
||||||
|
@ -23,25 +26,42 @@ func NewBindUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Bind
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type createUserInfoReq struct {
|
type createUserInfoReq struct {
|
||||||
Uid string `validate:"required"` // 唯一辨識碼
|
UID string `validate:"required"` // 唯一辨識碼
|
||||||
Language string `validate:"required"`
|
Language string `validate:"required"`
|
||||||
Currency string `validate:"required"`
|
Currency string `validate:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// BindUserInfo 初次,綁定 User Info
|
// BindUserInfo 初次,綁定 User Info
|
||||||
func (l *BindUserInfoLogic) BindUserInfo(in *member.CreateUserInfoReq) (*member.OKResp, error) {
|
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, errs.InvalidFormat(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err := l.svcCtx.AccountUseCase.BindUserInfo(l.ctx, usecase.CreateUserInfoRequest{
|
||||||
|
UID: in.GetUid(),
|
||||||
|
AvatarURL: proto.String(in.GetAvatar()),
|
||||||
|
FullName: proto.String(in.GetFullName()),
|
||||||
|
Nickname: proto.String(in.GetNickName()),
|
||||||
|
GenderCode: proto.Int64(in.GetGender()),
|
||||||
|
Birthdate: proto.Int64(in.GetBirthdate()),
|
||||||
|
PhoneNumber: proto.String(in.GetPhoneNumber()),
|
||||||
|
Email: proto.String(in.GetEmail()),
|
||||||
|
Address: proto.String(in.GetAddress()),
|
||||||
|
PreferredLanguage: in.GetLanguage(),
|
||||||
|
Currency: in.GetCurrency(),
|
||||||
|
AlarmCategory: domain.AlarmType(in.GetAlarmType().Number()),
|
||||||
|
UserStatus: domain.Status(in.GetStatus().Number()),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.OKResp{}, nil
|
return &member.OKResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"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/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -23,9 +25,24 @@ func NewBindVerifyEmailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *B
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type bindEmailVerifyReq struct {
|
||||||
|
UID string `validate:"required"` // 唯一辨識碼
|
||||||
|
Email string `validate:"required"` // 唯一辨識碼
|
||||||
|
}
|
||||||
|
|
||||||
// BindVerifyEmail 綁定 Email
|
// BindVerifyEmail 綁定 Email
|
||||||
func (l *BindVerifyEmailLogic) BindVerifyEmail(in *member.BindVerifyEmailReq) (*member.OKResp, error) {
|
func (l *BindVerifyEmailLogic) BindVerifyEmail(in *member.BindVerifyEmailReq) (*member.OKResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
if err := l.svcCtx.Validate.ValidateAll(&bindEmailVerifyReq{
|
||||||
|
UID: in.GetUid(),
|
||||||
|
Email: in.GetEmail(),
|
||||||
|
}); err != nil {
|
||||||
|
return nil, errs.InvalidFormat(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err := l.svcCtx.AccountUseCase.BindVerifyEmail(l.ctx, in.GetUid(), in.GetEmail())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.OKResp{}, nil
|
return &member.OKResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"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/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -23,9 +25,24 @@ func NewBindVerifyPhoneLogic(ctx context.Context, svcCtx *svc.ServiceContext) *B
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type bindPhoneVerifyReq struct {
|
||||||
|
UID string `validate:"required"` // 唯一辨識碼
|
||||||
|
Phone string `validate:"required"` // 唯一辨識碼
|
||||||
|
}
|
||||||
|
|
||||||
// BindVerifyPhone 綁定 Phone
|
// BindVerifyPhone 綁定 Phone
|
||||||
func (l *BindVerifyPhoneLogic) BindVerifyPhone(in *member.BindVerifyPhoneReq) (*member.OKResp, error) {
|
func (l *BindVerifyPhoneLogic) BindVerifyPhone(in *member.BindVerifyPhoneReq) (*member.OKResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
if err := l.svcCtx.Validate.ValidateAll(&bindPhoneVerifyReq{
|
||||||
|
UID: in.GetUid(),
|
||||||
|
Phone: in.GetPhone(),
|
||||||
|
}); err != nil {
|
||||||
|
return nil, errs.InvalidFormat(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err := l.svcCtx.AccountUseCase.BindVerifyPhone(l.ctx, in.GetUid(), in.GetPhone())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.OKResp{}, nil
|
return &member.OKResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,10 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
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/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -23,9 +27,35 @@ func NewCheckRefreshCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type checkRefreshCodeReq struct {
|
||||||
|
LoginID string `validate:"required"`
|
||||||
|
VerifyCode string `validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
// CheckRefreshCode 驗證忘記密碼 token 不刪除,只確認)
|
// CheckRefreshCode 驗證忘記密碼 token 不刪除,只確認)
|
||||||
func (l *CheckRefreshCodeLogic) CheckRefreshCode(in *member.VerifyRefreshCodeReq) (*member.OKResp, error) {
|
func (l *CheckRefreshCodeLogic) CheckRefreshCode(in *member.VerifyRefreshCodeReq) (*member.OKResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
// 驗證資料
|
||||||
|
if err := l.svcCtx.Validate.ValidateAll(&checkRefreshCodeReq{
|
||||||
|
LoginID: in.GetAccount(),
|
||||||
|
VerifyCode: in.GetVerifyCode(),
|
||||||
|
}); err != nil {
|
||||||
|
return nil, errs.InvalidFormat(err.Error())
|
||||||
|
}
|
||||||
|
code := domain.GenerateCodeType(in.GetCodeType())
|
||||||
|
_, status := domain.GetCodeNameByCode(code)
|
||||||
|
if !status {
|
||||||
|
return nil, errs.InvalidFormat("codeType is invalid")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 執行
|
||||||
|
err := l.svcCtx.AccountUseCase.CheckRefreshCode(l.ctx, usecase.VerifyRefreshCodeRequest{
|
||||||
|
LoginID: in.GetAccount(),
|
||||||
|
VerifyCode: in.GetVerifyCode(),
|
||||||
|
CodeType: code,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.OKResp{}, nil
|
return &member.OKResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,12 @@ package accountlogic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"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/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
@ -23,9 +29,47 @@ func NewCreateUserAccountLogic(ctx context.Context, svcCtx *svc.ServiceContext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type createUserAccountReq struct {
|
||||||
|
LoginID string `validate:"required"`
|
||||||
|
Token string `validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
// CreateUserAccount 建立帳號與密碼 -> 可登入,但可不可以做其他事情看業務流程,也可以只註冊就好
|
// CreateUserAccount 建立帳號與密碼 -> 可登入,但可不可以做其他事情看業務流程,也可以只註冊就好
|
||||||
func (l *CreateUserAccountLogic) CreateUserAccount(in *member.CreateLoginUserReq) (*member.OKResp, error) {
|
func (l *CreateUserAccountLogic) CreateUserAccount(in *member.CreateLoginUserReq) (*member.OKResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
// 驗證資料
|
||||||
|
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
|
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
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,9 @@ import (
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
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"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
)
|
)
|
||||||
|
@ -23,9 +26,34 @@ func NewGenerateRefreshCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type generateRefreshCodeReq struct {
|
||||||
|
LoginID string `validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
// GenerateRefreshCode 這個帳號驗證碼(十分鐘),通用的
|
// GenerateRefreshCode 這個帳號驗證碼(十分鐘),通用的
|
||||||
func (l *GenerateRefreshCodeLogic) GenerateRefreshCode(in *member.GenerateRefreshCodeReq) (*member.GenerateRefreshCodeResp, error) {
|
func (l *GenerateRefreshCodeLogic) GenerateRefreshCode(in *member.GenerateRefreshCodeReq) (*member.GenerateRefreshCodeResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
// 驗證資料
|
||||||
|
if err := l.svcCtx.Validate.ValidateAll(&generateRefreshCodeReq{
|
||||||
|
LoginID: in.GetAccount(),
|
||||||
|
}); err != nil {
|
||||||
|
return nil, errs.InvalidFormat(err.Error())
|
||||||
|
}
|
||||||
|
ct := domain.GenerateCodeType(in.GetCodeType())
|
||||||
|
_, status := domain.GetCodeNameByCode(ct)
|
||||||
|
if !status {
|
||||||
|
return nil, errs.InvalidFormat("codeType is invalid")
|
||||||
|
}
|
||||||
|
|
||||||
return &member.GenerateRefreshCodeResp{}, nil
|
// 產生
|
||||||
|
code, err := l.svcCtx.AccountUseCase.GenerateRefreshCode(l.ctx, usecase.GenerateRefreshCodeRequest{
|
||||||
|
LoginID: in.GetAccount(),
|
||||||
|
CodeType: ct,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &member.GenerateRefreshCodeResp{
|
||||||
|
Data: &member.VerifyCode{VerifyCode: code.Data.VerifyCode},
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,9 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"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/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -23,9 +26,27 @@ func NewGetUIDByAccountLogic(ctx context.Context, svcCtx *svc.ServiceContext) *G
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type getUIDByAccountReq struct {
|
||||||
|
Account string `validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
// GetUIDByAccount 用帳號換取 UID
|
// GetUIDByAccount 用帳號換取 UID
|
||||||
func (l *GetUIDByAccountLogic) GetUIDByAccount(in *member.GetUIDByAccountReq) (*member.GetUIDByAccountResp, error) {
|
func (l *GetUIDByAccountLogic) GetUIDByAccount(in *member.GetUIDByAccountReq) (*member.GetUIDByAccountResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
if err := l.svcCtx.Validate.ValidateAll(&getUIDByAccountReq{
|
||||||
|
Account: in.GetAccount(),
|
||||||
|
}); err != nil {
|
||||||
|
return nil, errs.InvalidFormat(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
return &member.GetUIDByAccountResp{}, nil
|
account, err := l.svcCtx.AccountUseCase.GetUIDByAccount(l.ctx, usecase.GetUIDByAccountRequest{
|
||||||
|
Account: in.GetAccount(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &member.GetUIDByAccountResp{
|
||||||
|
Account: account.Account,
|
||||||
|
Uid: account.UID,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,9 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"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/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -23,9 +26,30 @@ func NewGetUserAccountInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type getUserAccountInfoReq struct {
|
||||||
|
Account string `validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
// GetUserAccountInfo 取得帳號密碼資料
|
// GetUserAccountInfo 取得帳號密碼資料
|
||||||
func (l *GetUserAccountInfoLogic) GetUserAccountInfo(in *member.GetUIDByAccountReq) (*member.GetAccountInfoResp, error) {
|
func (l *GetUserAccountInfoLogic) GetUserAccountInfo(in *member.GetUIDByAccountReq) (*member.GetAccountInfoResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
if err := l.svcCtx.Validate.ValidateAll(&getUserAccountInfoReq{
|
||||||
|
Account: in.GetAccount(),
|
||||||
|
}); err != nil {
|
||||||
|
return nil, errs.InvalidFormat(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
return &member.GetAccountInfoResp{}, nil
|
info, err := l.svcCtx.AccountUseCase.GetUserAccountInfo(l.ctx, usecase.GetUIDByAccountRequest{
|
||||||
|
Account: in.GetAccount(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &member.GetAccountInfoResp{
|
||||||
|
Data: &member.CreateLoginUserReq{
|
||||||
|
LoginId: info.Data.LoginID,
|
||||||
|
Token: info.Data.Token,
|
||||||
|
Platform: info.Data.Platform.ToInt64(),
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
)
|
)
|
||||||
|
@ -25,7 +26,31 @@ func NewGetUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUs
|
||||||
|
|
||||||
// GetUserInfo 取得會員資訊
|
// GetUserInfo 取得會員資訊
|
||||||
func (l *GetUserInfoLogic) GetUserInfo(in *member.GetUserInfoReq) (*member.GetUserInfoResp, error) {
|
func (l *GetUserInfoLogic) GetUserInfo(in *member.GetUserInfoReq) (*member.GetUserInfoResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
info, err := l.svcCtx.AccountUseCase.GetUserInfo(l.ctx, usecase.GetUserInfoRequest{
|
||||||
|
UID: in.GetUid(),
|
||||||
|
NickName: in.GetNickName(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.GetUserInfoResp{}, nil
|
return &member.GetUserInfoResp{
|
||||||
|
Data: &member.UserInfo{
|
||||||
|
Uid: info.UID,
|
||||||
|
AvatarUrl: info.AvatarURL,
|
||||||
|
NickName: info.Nickname,
|
||||||
|
FullName: info.FullName,
|
||||||
|
GenderCode: info.GenderCode,
|
||||||
|
Birthday: info.Birthdate,
|
||||||
|
Phone: info.PhoneNumber,
|
||||||
|
Email: info.Email,
|
||||||
|
Address: info.Address,
|
||||||
|
AlarmType: member.AlarmType(info.AlarmCategory),
|
||||||
|
Status: member.MemberStatus(info.UserStatus),
|
||||||
|
Language: info.PreferredLanguage,
|
||||||
|
Currency: info.Currency,
|
||||||
|
CreateTime: info.CreateTime,
|
||||||
|
UpdateTime: info.UpdateTime,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,13 @@ func NewLineCodeToAccessTokenLogic(ctx context.Context, svcCtx *svc.ServiceConte
|
||||||
}
|
}
|
||||||
|
|
||||||
// LineCodeToAccessToken Line 驗證相關
|
// LineCodeToAccessToken Line 驗證相關
|
||||||
func (l *LineCodeToAccessTokenLogic) LineCodeToAccessToken(in *member.NoneReq) (*member.LineAccessTokenResp, error) {
|
func (l *LineCodeToAccessTokenLogic) LineCodeToAccessToken(in *member.LineGetTokenReq) (*member.LineAccessTokenResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
token, err := l.svcCtx.AccountUseCase.LineCodeToAccessToken(l.ctx, in.GetCode())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.LineAccessTokenResp{}, nil
|
return &member.LineAccessTokenResp{
|
||||||
|
Token: token.AccessToken,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,16 @@ func NewLineGetProfileByAccessTokenLogic(ctx context.Context, svcCtx *svc.Servic
|
||||||
}
|
}
|
||||||
|
|
||||||
// LineGetProfileByAccessToken Line 驗證相關
|
// LineGetProfileByAccessToken Line 驗證相關
|
||||||
func (l *LineGetProfileByAccessTokenLogic) LineGetProfileByAccessToken(in *member.NoneReq) (*member.LineUserProfile, error) {
|
func (l *LineGetProfileByAccessTokenLogic) LineGetProfileByAccessToken(in *member.LineGetUserInfoReq) (*member.LineUserProfile, error) {
|
||||||
// todo: add your logic here and delete this line
|
user, err := l.svcCtx.AccountUseCase.LineGetProfileByAccessToken(l.ctx, in.GetToken())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.LineUserProfile{}, nil
|
return &member.LineUserProfile{
|
||||||
|
DisplayName: user.DisplayName,
|
||||||
|
UserId: user.UserID,
|
||||||
|
PictureUrl: user.PictureURL,
|
||||||
|
StatusMessage: user.StatusMessage,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,11 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
pb "code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
)
|
)
|
||||||
|
@ -24,8 +27,72 @@ func NewListMemberLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListMe
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListMember 取得會員列表
|
// ListMember 取得會員列表
|
||||||
func (l *ListMemberLogic) ListMember(in *member.ListUserInfoReq) (*member.ListUserInfoResp, error) {
|
func (l *ListMemberLogic) ListMember(in *pb.ListUserInfoReq) (*pb.ListUserInfoResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
q := usecase.ListUserInfoRequest{
|
||||||
|
PageSize: in.GetPageSize(),
|
||||||
|
PageIndex: in.GetPageIndex(),
|
||||||
|
}
|
||||||
|
if in.CreateStartTime != nil {
|
||||||
|
q.CreateStartTime = proto.Int64(in.GetCreateStartTime())
|
||||||
|
}
|
||||||
|
|
||||||
return &member.ListUserInfoResp{}, nil
|
if in.CreateEndTime != nil {
|
||||||
|
q.CreateEndTime = proto.Int64(in.GetCreateEndTime())
|
||||||
|
}
|
||||||
|
if in.AlarmType != nil {
|
||||||
|
a := member.AlarmType(in.GetAlarmType().Number())
|
||||||
|
q.AlarmCategory = &a
|
||||||
|
}
|
||||||
|
|
||||||
|
if in.Status != nil {
|
||||||
|
s := member.Status(in.GetStatus().Number())
|
||||||
|
q.UserStatus = &s
|
||||||
|
}
|
||||||
|
|
||||||
|
members, err := l.svcCtx.AccountUseCase.ListMember(l.ctx, q)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res := make([]*pb.UserInfo, 0, members.Page.Size)
|
||||||
|
if len(members.Data) == 0 {
|
||||||
|
return &pb.ListUserInfoResp{
|
||||||
|
Data: res,
|
||||||
|
Page: &pb.Pager{
|
||||||
|
Total: 0,
|
||||||
|
Size: members.Page.Size,
|
||||||
|
Index: members.Page.Index,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
at := pb.AlarmType(members.Data[0].AlarmCategory)
|
||||||
|
status := pb.MemberStatus(members.Data[0].UserStatus)
|
||||||
|
|
||||||
|
for _, m := range members.Data {
|
||||||
|
res = append(res, &pb.UserInfo{
|
||||||
|
Uid: m.UID,
|
||||||
|
AvatarUrl: m.AvatarURL,
|
||||||
|
FullName: m.FullName,
|
||||||
|
NickName: m.Nickname,
|
||||||
|
GenderCode: m.GenderCode,
|
||||||
|
Birthday: m.Birthdate,
|
||||||
|
Address: m.Address,
|
||||||
|
Email: m.Email,
|
||||||
|
Phone: m.PhoneNumber,
|
||||||
|
Language: m.PreferredLanguage,
|
||||||
|
Currency: m.Currency,
|
||||||
|
AlarmType: at,
|
||||||
|
Status: status,
|
||||||
|
CreateTime: m.CreateTime,
|
||||||
|
UpdateTime: m.UpdateTime,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return &pb.ListUserInfoResp{
|
||||||
|
Data: res,
|
||||||
|
Page: &pb.Pager{
|
||||||
|
Total: members.Page.Total,
|
||||||
|
Size: members.Page.Size,
|
||||||
|
Index: members.Page.Index,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,11 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
"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"
|
||||||
|
|
||||||
|
pb "code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
@ -24,8 +28,16 @@ func NewUpdateStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Upda
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateStatus 修改狀態
|
// UpdateStatus 修改狀態
|
||||||
func (l *UpdateStatusLogic) UpdateStatus(in *member.UpdateStatusReq) (*member.OKResp, error) {
|
func (l *UpdateStatusLogic) UpdateStatus(in *pb.UpdateStatusReq) (*pb.OKResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
if in.Status == pb.MemberStatus_STATUS_NONE {
|
||||||
|
return nil, errs.InvalidFormat("failed to get correct status")
|
||||||
|
}
|
||||||
|
|
||||||
return &member.OKResp{}, nil
|
s := member.Status(in.GetStatus().Number())
|
||||||
|
err := l.svcCtx.AccountUseCase.UpdateStatus(l.ctx, usecase.UpdateStatusRequest{Status: s, UID: in.GetUid()})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &pb.OKResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,10 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
|
||||||
|
pb "code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
@ -24,8 +27,39 @@ func NewUpdateUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Up
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateUserInfo 更新 User Info
|
// UpdateUserInfo 更新 User Info
|
||||||
func (l *UpdateUserInfoLogic) UpdateUserInfo(in *member.UpdateUserInfoReq) (*member.OKResp, error) {
|
func (l *UpdateUserInfoLogic) UpdateUserInfo(in *pb.UpdateUserInfoReq) (*pb.OKResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
q := usecase.UpdateUserInfoRequest{
|
||||||
|
UID: in.GetUid(),
|
||||||
|
AvatarURL: in.Avatar,
|
||||||
|
FullName: in.FullName,
|
||||||
|
Nickname: in.NickName,
|
||||||
|
Birthdate: in.Birthdate,
|
||||||
|
Address: in.Address,
|
||||||
|
PreferredLanguage: in.Language,
|
||||||
|
Currency: in.Currency,
|
||||||
|
}
|
||||||
|
if in.Gender != nil {
|
||||||
|
c := *in.Gender
|
||||||
|
code, err := safeInt64ToInt8(c)
|
||||||
|
if err == nil {
|
||||||
|
q.GenderCode = &code
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return &member.OKResp{}, nil
|
if in.AlarmType != nil {
|
||||||
|
a := member.AlarmType(in.GetAlarmType().Number())
|
||||||
|
q.AlarmCategory = &a
|
||||||
|
}
|
||||||
|
|
||||||
|
if in.Status != nil {
|
||||||
|
s := member.Status(in.GetStatus().Number())
|
||||||
|
q.UserStatus = &s
|
||||||
|
}
|
||||||
|
|
||||||
|
err := l.svcCtx.AccountUseCase.UpdateUserInfo(l.ctx, &q)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &pb.OKResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -25,7 +27,15 @@ func NewUpdateUserTokenLogic(ctx context.Context, svcCtx *svc.ServiceContext) *U
|
||||||
|
|
||||||
// UpdateUserToken 更新密碼
|
// UpdateUserToken 更新密碼
|
||||||
func (l *UpdateUserTokenLogic) UpdateUserToken(in *member.UpdateTokenReq) (*member.OKResp, error) {
|
func (l *UpdateUserTokenLogic) UpdateUserToken(in *member.UpdateTokenReq) (*member.OKResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
// 更新密碼
|
||||||
|
err := l.svcCtx.AccountUseCase.UpdateUserToken(l.ctx, usecase.UpdateTokenRequest{
|
||||||
|
Account: in.GetAccount(),
|
||||||
|
Token: in.GetToken(),
|
||||||
|
Platform: in.GetPlatform(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.OKResp{}, nil
|
return &member.OKResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -24,8 +26,26 @@ func NewVerifyGoogleAuthResultLogic(ctx context.Context, svcCtx *svc.ServiceCont
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifyGoogleAuthResult 驗證 google 登入是否有效
|
// VerifyGoogleAuthResult 驗證 google 登入是否有效
|
||||||
func (l *VerifyGoogleAuthResultLogic) VerifyGoogleAuthResult(in *member.VerifyAuthResultReq) (*member.VerifyAuthResultResp, error) {
|
func (l *VerifyGoogleAuthResultLogic) VerifyGoogleAuthResult(in *member.VerifyAuthResultReq) (*member.VerifyGoogleAuthResultResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
result, err := l.svcCtx.AccountUseCase.VerifyGoogleAuthResult(l.ctx, usecase.VerifyAuthResultRequest{
|
||||||
|
Account: in.GetAccount(),
|
||||||
|
Token: in.GetToken(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return &member.VerifyGoogleAuthResultResp{
|
||||||
|
Status: false,
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.VerifyAuthResultResp{}, nil
|
return &member.VerifyGoogleAuthResultResp{
|
||||||
|
Status: true,
|
||||||
|
Iss: &result.Iss,
|
||||||
|
Aud: &result.Aud,
|
||||||
|
Exp: &result.Exp,
|
||||||
|
Iat: &result.Iat,
|
||||||
|
Email: &result.Email,
|
||||||
|
EmailVerified: &result.EmailVerified,
|
||||||
|
Name: &result.Name,
|
||||||
|
Picture: &result.Picture,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
"code.30cm.net/digimon/app-cloudep-member-server/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -25,7 +27,15 @@ func NewVerifyPlatformAuthResultLogic(ctx context.Context, svcCtx *svc.ServiceCo
|
||||||
|
|
||||||
// VerifyPlatformAuthResult 驗證 google 登入是否有效
|
// VerifyPlatformAuthResult 驗證 google 登入是否有效
|
||||||
func (l *VerifyPlatformAuthResultLogic) VerifyPlatformAuthResult(in *member.VerifyAuthResultReq) (*member.VerifyAuthResultResp, error) {
|
func (l *VerifyPlatformAuthResultLogic) VerifyPlatformAuthResult(in *member.VerifyAuthResultReq) (*member.VerifyAuthResultResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
result, err := l.svcCtx.AccountUseCase.VerifyPlatformAuthResult(l.ctx, usecase.VerifyAuthResultRequest{
|
||||||
|
Account: in.GetAccount(),
|
||||||
|
Token: in.GetToken(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.VerifyAuthResultResp{}, nil
|
return &member.VerifyAuthResultResp{
|
||||||
|
Status: result.Status,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,10 @@ package accountlogic
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
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/gen_result/pb/member"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/svc"
|
||||||
|
|
||||||
|
@ -23,9 +27,30 @@ func NewVerifyRefreshCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type verifyRefreshCodeRequest struct {
|
||||||
|
LoginID string `validate:"required"`
|
||||||
|
VerifyCode string `validate:"required"`
|
||||||
|
CodeType int32 `validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
// VerifyRefreshCode 驗證忘記密碼 token
|
// VerifyRefreshCode 驗證忘記密碼 token
|
||||||
func (l *VerifyRefreshCodeLogic) VerifyRefreshCode(in *member.VerifyRefreshCodeReq) (*member.OKResp, error) {
|
func (l *VerifyRefreshCodeLogic) VerifyRefreshCode(in *member.VerifyRefreshCodeReq) (*member.OKResp, error) {
|
||||||
// todo: add your logic here and delete this line
|
if err := l.svcCtx.Validate.ValidateAll(&verifyRefreshCodeRequest{
|
||||||
|
LoginID: in.Account,
|
||||||
|
VerifyCode: in.VerifyCode,
|
||||||
|
CodeType: in.CodeType,
|
||||||
|
}); err != nil {
|
||||||
|
return nil, errs.InvalidFormat(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err := l.svcCtx.AccountUseCase.VerifyRefreshCode(l.ctx, usecase.VerifyRefreshCodeRequest{
|
||||||
|
LoginID: in.Account,
|
||||||
|
VerifyCode: in.VerifyCode,
|
||||||
|
CodeType: domain.GenerateCodeType(in.GetCodeType()),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &member.OKResp{}, nil
|
return &member.OKResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,7 @@ func (s *AccountServer) CheckRefreshCode(ctx context.Context, in *member.VerifyR
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifyGoogleAuthResult 驗證 google 登入是否有效
|
// VerifyGoogleAuthResult 驗證 google 登入是否有效
|
||||||
func (s *AccountServer) VerifyGoogleAuthResult(ctx context.Context, in *member.VerifyAuthResultReq) (*member.VerifyAuthResultResp, error) {
|
func (s *AccountServer) VerifyGoogleAuthResult(ctx context.Context, in *member.VerifyAuthResultReq) (*member.VerifyGoogleAuthResultResp, error) {
|
||||||
l := accountlogic.NewVerifyGoogleAuthResultLogic(ctx, s.svcCtx)
|
l := accountlogic.NewVerifyGoogleAuthResultLogic(ctx, s.svcCtx)
|
||||||
return l.VerifyGoogleAuthResult(in)
|
return l.VerifyGoogleAuthResult(in)
|
||||||
}
|
}
|
||||||
|
@ -126,13 +126,13 @@ func (s *AccountServer) VerifyPlatformAuthResult(ctx context.Context, in *member
|
||||||
}
|
}
|
||||||
|
|
||||||
// LineCodeToAccessToken Line 驗證相關
|
// LineCodeToAccessToken Line 驗證相關
|
||||||
func (s *AccountServer) LineCodeToAccessToken(ctx context.Context, in *member.NoneReq) (*member.LineAccessTokenResp, error) {
|
func (s *AccountServer) LineCodeToAccessToken(ctx context.Context, in *member.LineGetTokenReq) (*member.LineAccessTokenResp, error) {
|
||||||
l := accountlogic.NewLineCodeToAccessTokenLogic(ctx, s.svcCtx)
|
l := accountlogic.NewLineCodeToAccessTokenLogic(ctx, s.svcCtx)
|
||||||
return l.LineCodeToAccessToken(in)
|
return l.LineCodeToAccessToken(in)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LineGetProfileByAccessToken Line 驗證相關
|
// LineGetProfileByAccessToken Line 驗證相關
|
||||||
func (s *AccountServer) LineGetProfileByAccessToken(ctx context.Context, in *member.NoneReq) (*member.LineUserProfile, error) {
|
func (s *AccountServer) LineGetProfileByAccessToken(ctx context.Context, in *member.LineGetUserInfoReq) (*member.LineUserProfile, error) {
|
||||||
l := accountlogic.NewLineGetProfileByAccessTokenLogic(ctx, s.svcCtx)
|
l := accountlogic.NewLineGetProfileByAccessTokenLogic(ctx, s.svcCtx)
|
||||||
return l.LineGetProfileByAccessToken(in)
|
return l.LineGetProfileByAccessToken(in)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package svc
|
package svc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/internal/config"
|
"code.30cm.net/digimon/app-cloudep-member-server/internal/config"
|
||||||
cfg "code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/config"
|
cfg "code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/config"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
@ -46,6 +48,10 @@ func NewAccountUC(c *config.Config) usecase.AccountUseCase {
|
||||||
EnableStandardReadWriteSplitMode: c.Mongo.EnableStandardReadWriteSplitMode,
|
EnableStandardReadWriteSplitMode: c.Mongo.EnableStandardReadWriteSplitMode,
|
||||||
ConnectTimeoutMs: c.Mongo.ConnectTimeoutMs,
|
ConnectTimeoutMs: c.Mongo.ConnectTimeoutMs,
|
||||||
}
|
}
|
||||||
|
if c.Mongo.User != "" {
|
||||||
|
conf.User = c.Mongo.User
|
||||||
|
conf.Password = c.Mongo.Password
|
||||||
|
}
|
||||||
|
|
||||||
// 快取選項
|
// 快取選項
|
||||||
cacheOpts := []cache.Option{
|
cacheOpts := []cache.Option{
|
||||||
|
@ -57,36 +63,47 @@ func NewAccountUC(c *config.Config) usecase.AccountUseCase {
|
||||||
mgo.InitMongoOptions(*conf),
|
mgo.InitMongoOptions(*conf),
|
||||||
}
|
}
|
||||||
|
|
||||||
newRedis, err := redis.NewRedis(c.RedisConf, redis.Cluster())
|
newRedis, err := redis.NewRedis(c.Redis.RedisConf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ac := repository.NewAccountRepository(repository.AccountRepositoryParam{
|
||||||
|
Conf: conf,
|
||||||
|
CacheConf: c.Cache,
|
||||||
|
CacheOpts: cacheOpts,
|
||||||
|
DBOpts: dbOpts,
|
||||||
|
})
|
||||||
|
|
||||||
|
u := repository.NewUserRepository(repository.UserRepositoryParam{
|
||||||
|
Conf: conf,
|
||||||
|
CacheConf: c.Cache,
|
||||||
|
CacheOpts: cacheOpts,
|
||||||
|
DBOpts: dbOpts,
|
||||||
|
})
|
||||||
|
guid := repository.NewAutoIDRepository(repository.AutoIDRepositoryParam{
|
||||||
|
Conf: conf,
|
||||||
|
DBOpts: dbOpts,
|
||||||
|
})
|
||||||
|
auid := repository.NewAccountUIDRepository(repository.AccountUIDRepositoryParam{
|
||||||
|
Conf: conf,
|
||||||
|
CacheConf: c.Cache,
|
||||||
|
CacheOpts: cacheOpts,
|
||||||
|
DBOpts: dbOpts,
|
||||||
|
})
|
||||||
|
|
||||||
|
_, _ = ac.Index20241226001UP(context.Background())
|
||||||
|
_, _ = u.Index20241226001UP(context.Background())
|
||||||
|
_, _ = guid.Index20241226001UP(context.Background())
|
||||||
|
_, _ = auid.Index20241226001UP(context.Background())
|
||||||
|
|
||||||
return uc.MustMemberUseCase(uc.MemberUseCaseParam{
|
return uc.MustMemberUseCase(uc.MemberUseCaseParam{
|
||||||
Account: repository.NewAccountRepository(repository.AccountRepositoryParam{
|
Account: ac,
|
||||||
Conf: conf,
|
User: u,
|
||||||
CacheConf: c.Cache,
|
AccountUID: auid,
|
||||||
CacheOpts: cacheOpts,
|
|
||||||
DBOpts: dbOpts,
|
|
||||||
}),
|
|
||||||
User: repository.NewUserRepository(repository.UserRepositoryParam{
|
|
||||||
Conf: conf,
|
|
||||||
CacheConf: c.Cache,
|
|
||||||
CacheOpts: cacheOpts,
|
|
||||||
DBOpts: dbOpts,
|
|
||||||
}),
|
|
||||||
AccountUID: repository.NewAccountUIDRepository(repository.AccountUIDRepositoryParam{
|
|
||||||
Conf: conf,
|
|
||||||
CacheConf: c.Cache,
|
|
||||||
CacheOpts: cacheOpts,
|
|
||||||
DBOpts: dbOpts,
|
|
||||||
}),
|
|
||||||
VerifyCodeModel: repository.NewVerifyCodeRepository(newRedis),
|
VerifyCodeModel: repository.NewVerifyCodeRepository(newRedis),
|
||||||
GenerateUID: repository.NewAutoIDRepository(repository.AutoIDRepositoryParam{
|
GenerateUID: guid,
|
||||||
Conf: conf,
|
Config: prepareCfg(c),
|
||||||
DBOpts: dbOpts,
|
|
||||||
}),
|
|
||||||
Config: prepareCfg(c),
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@ package repository
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
|
@ -14,7 +16,7 @@ type AccountRepository interface {
|
||||||
Update(ctx context.Context, data *entity.Account) (*mongo.UpdateResult, error)
|
Update(ctx context.Context, data *entity.Account) (*mongo.UpdateResult, error)
|
||||||
Delete(ctx context.Context, id string) (int64, error)
|
Delete(ctx context.Context, id string) (int64, error)
|
||||||
FindOneByAccount(ctx context.Context, loginID string) (*entity.Account, error)
|
FindOneByAccount(ctx context.Context, loginID string) (*entity.Account, error)
|
||||||
UpdateTokenByLoginID(ctx context.Context, account string, token string) error
|
UpdateTokenByLoginID(ctx context.Context, account string, token string, platform member.Platform) error
|
||||||
AccountIndexUP
|
AccountIndexUP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
||||||
|
@ -113,9 +115,9 @@ func (repo *AccountRepository) FindOneByAccount(ctx context.Context, loginID str
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repo *AccountRepository) UpdateTokenByLoginID(ctx context.Context, account string, token string) error {
|
func (repo *AccountRepository) UpdateTokenByLoginID(ctx context.Context, account string, token string, platform member.Platform) error {
|
||||||
// todo: 之後需要同步快取
|
// todo: 之後需要同步快取
|
||||||
filter := bson.M{"login_id": account}
|
filter := bson.M{"login_id": account, "platform": platform.ToInt64()}
|
||||||
update := bson.M{
|
update := bson.M{
|
||||||
"$set": bson.M{
|
"$set": bson.M{
|
||||||
"token": token,
|
"token": token,
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
||||||
|
|
||||||
mgo "code.30cm.net/digimon/library-go/mongo"
|
mgo "code.30cm.net/digimon/library-go/mongo"
|
||||||
"github.com/alicebob/miniredis/v2"
|
"github.com/alicebob/miniredis/v2"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
||||||
|
|
||||||
mgo "code.30cm.net/digimon/library-go/mongo"
|
mgo "code.30cm.net/digimon/library-go/mongo"
|
||||||
"github.com/alicebob/miniredis/v2"
|
"github.com/alicebob/miniredis/v2"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
||||||
|
|
||||||
mgo "code.30cm.net/digimon/library-go/mongo"
|
mgo "code.30cm.net/digimon/library-go/mongo"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
||||||
|
|
||||||
mgo "code.30cm.net/digimon/library-go/mongo"
|
mgo "code.30cm.net/digimon/library-go/mongo"
|
||||||
"github.com/alicebob/miniredis/v2"
|
"github.com/alicebob/miniredis/v2"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/repository"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/redis"
|
"github.com/zeromicro/go-zero/core/stores/redis"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
||||||
|
|
||||||
"github.com/alicebob/miniredis/v2"
|
"github.com/alicebob/miniredis/v2"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/zeromicro/go-zero/core/stores/redis"
|
"github.com/zeromicro/go-zero/core/stores/redis"
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package usecase
|
package usecase
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"go.uber.org/mock/gomock"
|
"go.uber.org/mock/gomock"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package usecase
|
package usecase
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
|
||||||
mockRepo "code.30cm.net/digimon/app-cloudep-member-server/pkg/mock/repository"
|
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"math"
|
"math"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
mockRepo "code.30cm.net/digimon/app-cloudep-member-server/pkg/mock/repository"
|
||||||
|
|
||||||
GIDLib "code.30cm.net/digimon/library-go/utils/invited_code"
|
GIDLib "code.30cm.net/digimon/library-go/utils/invited_code"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"go.uber.org/mock/gomock"
|
"go.uber.org/mock/gomock"
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
@ -69,7 +70,7 @@ func (use *MemberUseCase) GetUIDByAccount(ctx context.Context, req usecase.GetUI
|
||||||
e = errs.ResourceNotFoundWithScope(
|
e = errs.ResourceNotFoundWithScope(
|
||||||
code.CloudEPMember,
|
code.CloudEPMember,
|
||||||
domain.FailedFindUIDByLoginIDErrorCode,
|
domain.FailedFindUIDByLoginIDErrorCode,
|
||||||
fmt.Sprintf("failed to insert account: %s", req.Account),
|
fmt.Sprintf("failed to find uid by account: %s", req.Account),
|
||||||
)
|
)
|
||||||
default:
|
default:
|
||||||
// 錯誤代碼 20-201-07
|
// 錯誤代碼 20-201-07
|
||||||
|
@ -82,7 +83,7 @@ func (use *MemberUseCase) GetUIDByAccount(ctx context.Context, req usecase.GetUI
|
||||||
{Key: "func", Value: "AccountUID.FindUIDByLoginID"},
|
{Key: "func", Value: "AccountUID.FindUIDByLoginID"},
|
||||||
{Key: "err", Value: err.Error()},
|
{Key: "err", Value: err.Error()},
|
||||||
},
|
},
|
||||||
"failed to find account").Wrap(err)
|
"failed to find uid by account").Wrap(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return usecase.GetUIDByAccountResponse{}, e
|
return usecase.GetUIDByAccountResponse{}, e
|
||||||
|
@ -217,8 +218,11 @@ func (use *MemberUseCase) UpdateUserToken(ctx context.Context, req usecase.Updat
|
||||||
fmt.Sprintf("failed to encrypt err: %s", e.Error()),
|
fmt.Sprintf("failed to encrypt err: %s", e.Error()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
toInt8, err := safeInt64ToInt8(req.Platform)
|
||||||
err := use.Account.UpdateTokenByLoginID(ctx, req.Account, token)
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = use.Account.UpdateTokenByLoginID(ctx, req.Account, token, member.Platform(toInt8))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var e *errs.LibError
|
var e *errs.LibError
|
||||||
switch {
|
switch {
|
||||||
|
@ -388,3 +392,11 @@ func GetOriginalInt64(value *int64) int64 {
|
||||||
|
|
||||||
return *value
|
return *value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package usecase
|
package usecase
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/config"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/config"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
@ -8,9 +12,6 @@ import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
mockRepo "code.30cm.net/digimon/app-cloudep-member-server/pkg/mock/repository"
|
mockRepo "code.30cm.net/digimon/app-cloudep-member-server/pkg/mock/repository"
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/repository"
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/repository"
|
||||||
"context"
|
|
||||||
"errors"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"code.30cm.net/digimon/library-go/errs"
|
"code.30cm.net/digimon/library-go/errs"
|
||||||
"code.30cm.net/digimon/library-go/errs/code"
|
"code.30cm.net/digimon/library-go/errs/code"
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package usecase
|
package usecase
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
|
||||||
"code.30cm.net/digimon/library-go/errs"
|
"code.30cm.net/digimon/library-go/errs"
|
||||||
"code.30cm.net/digimon/library-go/errs/code"
|
"code.30cm.net/digimon/library-go/errs/code"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
package usecase
|
package usecase
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
|
||||||
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
|
||||||
mockRepo "code.30cm.net/digimon/app-cloudep-member-server/pkg/mock/repository"
|
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/entity"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/member"
|
||||||
|
"code.30cm.net/digimon/app-cloudep-member-server/pkg/domain/usecase"
|
||||||
|
mockRepo "code.30cm.net/digimon/app-cloudep-member-server/pkg/mock/repository"
|
||||||
|
|
||||||
"code.30cm.net/digimon/library-go/errs"
|
"code.30cm.net/digimon/library-go/errs"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"go.uber.org/mock/gomock"
|
"go.uber.org/mock/gomock"
|
||||||
|
|
Loading…
Reference in New Issue