package usecase import ( "app-cloudep-member-server/pkg/domain/member" "context" ) // AccountUseCase 定義了帳號服務的操作方法 type AccountUseCase interface { MemberUseCase BindingMemberUseCase VerifyMemberUseCase UIDGenerateUseCase } type MemberUseCase interface { // CreateUserAccount 創建用戶帳號 CreateUserAccount(ctx context.Context, req CreateLoginUserRequest) error // GetUIDByAccount 通過帳號取得 UID GetUIDByAccount(ctx context.Context, req GetUIDByAccountRequest) (GetUIDByAccountResponse, error) // GetUserAccountInfo 取得用戶帳號資訊 GetUserAccountInfo(ctx context.Context, req GetUIDByAccountRequest) (GetAccountInfoResponse, error) // UpdateUserToken 更新用戶 Token (密碼) UpdateUserToken(ctx context.Context, req UpdateTokenRequest) error // UpdateUserInfo 更新用戶資訊 UpdateUserInfo(ctx context.Context, req *UpdateUserInfoRequest) error // UpdateStatus 更新用戶狀態 UpdateStatus(ctx context.Context, req UpdateStatusRequest) error // GetUserInfo 取得用戶資訊 GetUserInfo(ctx context.Context, req GetUserInfoRequest) (UserInfo, error) // ListMember 取得會員列表 ListMember(ctx context.Context, req ListUserInfoRequest) (ListUserInfoResponse, error) } type BindingMemberUseCase interface { // BindUserInfo 綁定用戶信息 BindUserInfo(ctx context.Context, req CreateUserInfoRequest) error // BindAccount 綁定帳號到 UID BindAccount(ctx context.Context, req BindingUser) (BindingUser, error) // BindVerifyEmail 驗證Email 後綁定到會員 BindVerifyEmail(ctx context.Context, uid, email string) error // BindVerifyPhone 驗證 Phone 後綁定到會員 BindVerifyPhone(ctx context.Context, uid, phone string) error } // CreateUserInfoRequest 用於創建用戶詳細信息 type CreateUserInfoRequest struct { UID string `json:"uid"` // 用戶 UID AvatarURL *string `json:"avatar_url,omitempty"` // 頭像 URL(可選) FullName *string `json:"full_name,omitempty"` // 用戶全名 Nickname *string `json:"nickname,omitempty"` // 暱稱(可選) GenderCode *int64 `json:"gender_code,omitempty"` // 性別代碼 Birthdate *int64 `json:"birthdate,omitempty"` // 生日 (格式: 19930417) PhoneNumber *string `json:"phone_number,omitempty"` // 電話 Email *string `json:"email,omitempty"` // 電話 Address *string `json:"address,omitempty"` // 地址 AlarmCategory member.AlarmType `json:"alarm_category"` // 警報類型 UserStatus member.Status `json:"user_status"` // 用戶狀態 PreferredLanguage string `json:"preferred_language"` // 使用語言 Currency string `json:"currency"` // 使用幣種 } type UserInfo struct { CreateUserInfoRequest CreateTime int64 `json:"create_time"` // 創建時間 UpdateTime int64 `json:"update_time"` // 更新時間 } type UpdateUserInfoRequest struct { UID string `json:"uid"` // 用戶 UID AvatarURL *string `json:"avatar_url,omitempty"` // 頭像 URL(可選) FullName *string `json:"full_name,omitempty"` // 用戶全名 Nickname *string `json:"nickname,omitempty"` // 暱稱(可選) GenderCode *int8 `json:"gender_code,omitempty"` // 性別代碼 Birthdate *int64 `json:"birthdate,omitempty"` // 生日 (格式: 19930417) Address *string `json:"address,omitempty"` // 地址 AlarmCategory *member.AlarmType `json:"alarm_category,omitempty"` // 警報類型 UserStatus *member.Status `json:"user_status,omitempty"` // 用戶狀態 PreferredLanguage *string `json:"preferred_language,omitempty"` // 使用語言 Currency *string `json:"currency,omitempty"` // 使用幣種 } type CreateLoginUserRequest struct { LoginID string `json:"login_id"` // 登錄 ID Platform member.Platform `json:"platform"` // 平台類型 Token string `json:"token"` // 驗證 Token } // BindingUser 用於綁定用戶帳號 type BindingUser struct { UID string `json:"uid"` // 用戶 UID LoginID string `json:"login_id"` // 登錄 ID Type member.AccountType `json:"type"` // 綁定類型 } // GetUIDByAccountRequest 用於通過帳號獲取用戶 UID type GetUIDByAccountRequest struct { Account string `json:"account"` // 帳號 } // GetUIDByAccountResponse 用於返回帳號對應的 UID 信息 type GetUIDByAccountResponse struct { UID string `json:"uid"` // 用戶 UID Account string `json:"account"` // 帳號 } // GetAccountInfoResponse 用於返回用戶帳號信息 type GetAccountInfoResponse struct { Data CreateLoginUserRequest `json:"data"` // 登錄用戶信息 } // UpdateTokenRequest 用於更新用戶 Token type UpdateTokenRequest struct { Account string `json:"account"` // 帳號 Token string `json:"token"` // 新 Token Platform int64 `json:"platform"` // 平台類型 } // GenerateRefreshCodeRequest 用於請求產生刷新代碼 type GenerateRefreshCodeRequest struct { LoginID string `json:"login_id"` // 帳號 CodeType member.GenerateCodeType `json:"code_type"` // 代碼類型 } // VerifyCode 用於表示驗證代碼 type VerifyCode struct { VerifyCode string `json:"verify_code"` // 驗證碼 } // GenerateRefreshCodeResponse 用於返回生成的驗證代碼 type GenerateRefreshCodeResponse struct { Data VerifyCode `json:"data"` // 驗證碼數據 } // VerifyRefreshCodeRequest 用於驗證刷新代碼 type VerifyRefreshCodeRequest struct { LoginID string `json:"Login_id"` // 帳號 CodeType member.GenerateCodeType `json:"code_type"` // 代碼類型 VerifyCode string `json:"verify_code"` // 驗證碼 } // UpdateStatusRequest 用於更新用戶狀態 type UpdateStatusRequest struct { UID string `json:"uid"` // 用戶 UID Status member.Status `json:"status"` // 用戶狀態 } // GetUserInfoRequest 用於請求取得用戶詳細信息 type GetUserInfoRequest struct { UID string `json:"uid,omitempty"` // 用戶 UID NickName string `json:"nick_name,omitempty"` // 暱稱(可選) } // GetUserInfoResponse 用於返回用戶詳細信息 type GetUserInfoResponse struct { Data UserInfo `json:"data"` // 用戶信息 } // ListUserInfoRequest 用於查詢符合條件的用戶列表 type ListUserInfoRequest struct { VerificationType *member.AccountType `json:"verification_type,omitempty"` // 驗證類型(可選) AlarmCategory *member.AlarmType `json:"alarm_category,omitempty"` // 警報類型(可選) UserStatus *member.Status `json:"user_status,omitempty"` // 用戶狀態(可選) CreateStartTime *int64 `json:"create_start_time,omitempty"` // 創建開始時間(可選) CreateEndTime *int64 `json:"create_end_time,omitempty"` // 創建結束時間(可選) PageSize int64 `json:"page_size"` // 每頁大小 PageIndex int64 `json:"page_index"` // 當前頁索引 } // ListUserInfoResponse 用於返回查詢的用戶列表及分頁信息 type ListUserInfoResponse struct { Data []UserInfo `json:"data"` // 用戶列表 Page Pager `json:"page"` // 分頁信息 } // VerifyAuthResultRequest 用於請求驗證授權結果 type VerifyAuthResultRequest struct { Token string `json:"token"` // 驗證 Token Account string `json:"account"` // 帳號 } // VerifyAuthResultResponse 用於返回授權驗證結果 type VerifyAuthResultResponse struct { Status bool `json:"status"` // 驗證結果狀態 } // TwitterAccessTokenResponse 用於返回 Twitter 授權令牌 type TwitterAccessTokenResponse struct { Token string `json:"token"` // 授權 Token } type GoogleTokenInfo struct { Iss string `json:"iss"` // 發行者 (issuer) 通常為 "https://accounts.google.com" Sub string `json:"sub"` // 使用者唯一 ID Aud string `json:"aud"` // Audience,應該與你的 Client ID 匹配 Exp string `json:"exp"` // 過期時間 (UNIX timestamp) Iat string `json:"iat"` // 發行時間 (UNIX timestamp) Email string `json:"email"` // 使用者的電子郵件 EmailVerified string `json:"email_verified"` // 郵件是否已驗證 Name string `json:"name"` // 使用者的名稱 Picture string `json:"picture"` // 使用者的頭像 URL } type LineAccessTokenResponse struct { AccessToken string `json:"access_token"` IDToken string `json:"id_token"` ExpiresIn int `json:"expires_in"` TokenType string `json:"token_type"` Scope string `json:"scope"` RefreshToken string `json:"refresh_token"` } type LineUserProfile struct { UserID string `json:"userId"` DisplayName string `json:"displayName"` PictureURL string `json:"pictureUrl"` StatusMessage string `json:"statusMessage"` }