backend/generate/api/member.api

555 lines
19 KiB
Plaintext

syntax = "v1"
// ================ 請求/響應結構 ================
type (
// 創建帳號請求
CreateUserAccountReq {
LoginID string `json:"login_id" validate:"required,min=3,max=50"`
Platform string `json:"platform" validate:"required,oneof=platform google line apple"`
Token string `json:"token" validate:"required,min=8,max=128"`
}
// 綁定用戶請求
BindingUserReq {
UID string `json:"uid" validate:"required,min=1,max=50"`
LoginID string `json:"login_id" validate:"required,min=3,max=50"`
Type int `json:"type" validate:"required,oneof=1 2 3"`
}
// 綁定用戶響應
BindingUserResp {
UID string `json:"uid"`
LoginID string `json:"login_id"`
Type int `json:"type"`
}
// 創建用戶資料請求
CreateUserInfoReq {
UID string `json:"uid" validate:"required,min=1,max=50"`
AlarmType int `json:"alarm_type" validate:"required,oneof=0 1 2"`
Status int `json:"status" validate:"required,oneof=0 1 2 3"`
Language string `json:"language" validate:"required,min=2,max=10"`
Currency string `json:"currency" validate:"required,min=3,max=3"`
Avatar *string `json:"avatar,omitempty"`
NickName *string `json:"nick_name,omitempty" validate:"omitempty,min=1,max=50"`
FullName *string `json:"full_name,omitempty" validate:"omitempty,min=1,max=100"`
Gender *int64 `json:"gender,omitempty" validate:"omitempty,oneof=0 1 2"`
Birthdate *int64 `json:"birthdate,omitempty" validate:"omitempty,min=19000101,max=21001231"`
PhoneNumber *string `json:"phone_number,omitempty" validate:"omitempty,min=10,max=20"`
Email *string `json:"email,omitempty" validate:"omitempty,email"`
Address *string `json:"address,omitempty" validate:"omitempty,max=200"`
}
// 獲取帳號資訊響應
GetAccountInfoResp {
Data CreateUserAccountReq `json:"data"`
}
// 更新用戶資料請求
UpdateUserInfoReq {
UID string `json:"uid" validate:"required,min=1,max=50"`
Language *string `json:"language,omitempty" validate:"omitempty,min=2,max=10"`
Currency *string `json:"currency,omitempty" validate:"omitempty,min=3,max=3"`
NickName *string `json:"nick_name,omitempty" validate:"omitempty,min=1,max=50"`
Avatar *string `json:"avatar,omitempty"`
AlarmType *int `json:"alarm_type,omitempty" validate:"omitempty,oneof=0 1 2"`
Status *int `json:"status,omitempty" validate:"omitempty,oneof=0 1 2 3"`
FullName *string `json:"full_name,omitempty" validate:"omitempty,min=1,max=100"`
Gender *int64 `json:"gender,omitempty" validate:"omitempty,oneof=0 1 2"`
Birthdate *int64 `json:"birthdate,omitempty" validate:"omitempty,min=19000101,max=21001231"`
Address *string `json:"address,omitempty" validate:"omitempty,max=200"`
}
// 獲取 UID 請求
GetUIDByAccountReq {
Account string `json:"account" validate:"required,min=3,max=50"`
}
// 獲取 UID 響應
GetUIDByAccountResp {
UID string `json:"uid"`
Account string `json:"account"`
}
// 更新密碼請求
UpdateTokenReq {
Account string `json:"account" validate:"required,min=3,max=50"`
Token string `json:"token" validate:"required,min=8,max=128"`
Platform int `json:"platform" validate:"required,oneof=1 2 3 4"`
}
// 生成驗證碼請求
GenerateRefreshCodeReq {
Account string `json:"account" validate:"required,min=3,max=50"`
CodeType int `json:"code_type" validate:"required,oneof=1 2 3"`
}
// 驗證碼響應
VerifyCodeResp {
VerifyCode string `json:"verify_code"`
}
// 生成驗證碼響應
GenerateRefreshCodeResp {
Data VerifyCodeResp `json:"data"`
}
// 驗證碼請求
VerifyRefreshCodeReq {
Account string `json:"account" validate:"required,min=3,max=50"`
CodeType int `json:"code_type" validate:"required,oneof=1 2 3"`
VerifyCode string `json:"verify_code" validate:"required,min=4,max=10"`
}
// 更新狀態請求
UpdateStatusReq {
UID string `json:"uid" validate:"required,min=1,max=50"`
Status int `json:"status" validate:"required,oneof=0 1 2 3"`
}
// 獲取用戶資訊請求
GetUserInfoReq {
UID string `json:"uid,omitempty" validate:"omitempty,min=1,max=50"`
NickName *string `json:"nick_name,omitempty" validate:"omitempty,min=1,max=50"`
}
// 用戶資訊
UserInfo {
UID string `json:"uid"`
AvatarURL *string `json:"avatar_url,omitempty"`
FullName *string `json:"full_name,omitempty"`
NickName *string `json:"nick_name,omitempty"`
GenderCode *int64 `json:"gender_code,omitempty"`
Birthday *int64 `json:"birthday,omitempty"`
Phone *string `json:"phone,omitempty"`
Email *string `json:"email,omitempty"`
Address *string `json:"address,omitempty"`
AlarmType int `json:"alarm_type"`
Status int `json:"status"`
Language string `json:"language"`
Currency string `json:"currency"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
}
// 獲取用戶資訊響應
GetUserInfoResp {
Data UserInfo `json:"data"`
}
// 用戶列表請求
ListUserInfoReq {
AlarmType *int `json:"alarm_type,omitempty" validate:"omitempty,oneof=0 1 2"`
Status *int `json:"status,omitempty" validate:"omitempty,oneof=0 1 2 3"`
CreateStartTime *int64 `json:"create_start_time,omitempty"`
CreateEndTime *int64 `json:"create_end_time,omitempty"`
PageSize int `json:"page_size" validate:"required,min=1,max=100"`
PageIndex int `json:"page_index" validate:"required,min=1"`
}
// 用戶列表響應
ListUserInfoResp {
Data []UserInfo `json:"data"`
Pager PagerResp `json:"pager"`
}
// 驗證認證結果請求
VerifyAuthResultReq {
Token string `json:"token" validate:"required,min=1"`
Account *string `json:"account,omitempty" validate:"omitempty,min=3,max=50"`
}
// 驗證認證結果響應
VerifyAuthResultResp {
Status bool `json:"status"`
}
// Google 認證結果響應
VerifyGoogleAuthResultResp {
Status bool `json:"status"`
Iss *string `json:"iss,omitempty"`
Sub *string `json:"sub,omitempty"`
Aud *string `json:"aud,omitempty"`
Exp *string `json:"exp,omitempty"`
Iat *string `json:"iat,omitempty"`
Email *string `json:"email,omitempty"`
EmailVerified *string `json:"email_verified,omitempty"`
Name *string `json:"name,omitempty"`
Picture *string `json:"picture,omitempty"`
}
// 綁定驗證 Email 請求
BindVerifyEmailReq {
UID string `json:"uid" validate:"required,min=1,max=50"`
Email string `json:"email" validate:"required,email"`
}
// 綁定驗證 Phone 請求
BindVerifyPhoneReq {
UID string `json:"uid" validate:"required,min=1,max=50"`
Phone string `json:"phone" validate:"required,min=10,max=20"`
}
// LINE 獲取 Token 請求
LineGetTokenReq {
Code string `json:"code" validate:"required,min=1"`
}
// LINE Access Token 響應
LineAccessTokenResp {
Token string `json:"token"`
}
// LINE 用戶資料
LineUserProfile {
DisplayName string `json:"display_name"`
UserID string `json:"user_id"`
PictureURL string `json:"picture_url"`
StatusMessage string `json:"status_message"`
}
// LINE 獲取用戶資訊請求
LineGetUserInfoReq {
Token string `json:"token" validate:"required,min=1"`
}
)
// ================ API 路由 ================
@server(
group: account
prefix: /api/v1/account
)
service gateway {
@doc(
summary: "創建帳號"
description: "創建新的帳號,支援多平台登入"
)
/*
@respdoc-201 () // 創建成功
@respdoc-400 (
40001: (ErrorResp) 帳號格式錯誤
40002: (ErrorResp) 密碼強度不足
40003: (ErrorResp) 平台類型無效
) // 客戶端錯誤
@respdoc-409 (ErrorResp) // 帳號已存在
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler CreateUserAccount
post /create (CreateUserAccountReq) returns ()
@doc(
summary: "獲取帳號資訊"
description: "根據帳號獲取用戶的帳號資訊"
)
/*
@respdoc-200 (GetAccountInfoResp) // 獲取成功
@respdoc-400 (
40001: (ErrorResp) 帳號格式錯誤
40004: (ErrorResp) 參數驗證失敗
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 帳號不存在
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler GetUserAccountInfo
post /info (GetUIDByAccountReq) returns (GetAccountInfoResp)
@doc(
summary: "更新用戶密碼"
description: "更新指定帳號的密碼"
)
/*
@respdoc-200 (OKResp) // 更新成功
@respdoc-400 (
40001: (ErrorResp) 帳號格式錯誤
40002: (ErrorResp) 密碼強度不足
40003: (ErrorResp) 平台類型無效
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 帳號不存在
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler UpdateUserToken
post /update-token (UpdateTokenReq) returns (OKResp)
@doc(
summary: "獲取用戶 UID"
description: "根據帳號獲取對應的用戶 UID"
)
/*
@respdoc-200 (GetUIDByAccountResp) // 獲取成功
@respdoc-400 (
40001: (ErrorResp) 帳號格式錯誤
40004: (ErrorResp) 參數驗證失敗
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 帳號不存在
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler GetUIDByAccount
post /uid (GetUIDByAccountReq) returns (GetUIDByAccountResp)
@doc(
summary: "綁定帳號"
description: "將帳號綁定到指定的用戶 UID"
)
/*
@respdoc-200 (BindingUserResp) // 綁定成功
@respdoc-400 (
40001: (ErrorResp) 帳號格式錯誤
40004: (ErrorResp) 參數驗證失敗
40005: (ErrorResp) UID 格式錯誤
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 帳號不存在
@respdoc-409 (ErrorResp) // 帳號已綁定
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler BindAccount
post /bind (BindingUserReq) returns (BindingUserResp)
@doc(
summary: "綁定用戶資料"
description: "初次綁定用戶的詳細資料"
)
/*
@respdoc-200 (OKResp) // 綁定成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40005: (ErrorResp) UID 格式錯誤
40006: (ErrorResp) 郵箱格式錯誤
40007: (ErrorResp) 電話格式錯誤
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 用戶不存在
@respdoc-409 (ErrorResp) // 用戶資料已存在
@respdoc-422 (ErrorResp) // 用戶資料不完整
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler BindUserInfo
post /bind-info (CreateUserInfoReq) returns (OKResp)
@doc(
summary: "綁定驗證 Email"
description: "綁定並驗證用戶的 Email 地址"
)
/*
@respdoc-200 (OKResp) // 綁定成功
@respdoc-400 (
40005: (ErrorResp) UID 格式錯誤
40006: (ErrorResp) 郵箱格式錯誤
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 用戶不存在
@respdoc-409 (ErrorResp) // 郵箱已綁定
@respdoc-422 (ErrorResp) // 郵箱未驗證
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler BindVerifyEmail
post /bind-email (BindVerifyEmailReq) returns (OKResp)
@doc(
summary: "綁定驗證 Phone"
description: "綁定並驗證用戶的電話號碼"
)
/*
@respdoc-200 (OKResp) // 綁定成功
@respdoc-400 (
40005: (ErrorResp) UID 格式錯誤
40007: (ErrorResp) 電話格式錯誤
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 用戶不存在
@respdoc-409 (ErrorResp) // 電話已綁定
@respdoc-422 (ErrorResp) // 電話未驗證
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler BindVerifyPhone
post /bind-phone (BindVerifyPhoneReq) returns (OKResp)
@doc(
summary: "更新用戶資料"
description: "更新用戶的個人資料資訊"
)
/*
@respdoc-200 (OKResp) // 更新成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40005: (ErrorResp) UID 格式錯誤
40006: (ErrorResp) 郵箱格式錯誤
40007: (ErrorResp) 電話格式錯誤
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 用戶不存在
@respdoc-422 (ErrorResp) // 用戶資料無效
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler UpdateUserInfo
post /update-info (UpdateUserInfoReq) returns (OKResp)
@doc(
summary: "更新用戶狀態"
description: "更新用戶的帳號狀態"
)
/*
@respdoc-200 (OKResp) // 更新成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40005: (ErrorResp) UID 格式錯誤
40008: (ErrorResp) 狀態值無效
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 用戶不存在
@respdoc-422 (ErrorResp) // 狀態更新無效
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler UpdateStatus
post /update-status (UpdateStatusReq) returns (OKResp)
@doc(
summary: "獲取用戶資訊"
description: "根據 UID 或暱稱獲取用戶詳細資訊"
)
/*
@respdoc-200 (GetUserInfoResp) // 獲取成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40005: (ErrorResp) UID 格式錯誤
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 用戶不存在
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler GetUserInfo
post /user-info (GetUserInfoReq) returns (GetUserInfoResp)
@doc(
summary: "獲取用戶列表"
description: "分頁獲取用戶列表,支援篩選條件"
)
/*
@respdoc-200 (ListUserInfoResp) // 獲取成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40009: (ErrorResp) 分頁參數無效
) // 客戶端錯誤
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler ListMember
post /list (ListUserInfoReq) returns (ListUserInfoResp)
@doc(
summary: "生成驗證碼"
description: "為指定帳號生成驗證碼,用於忘記密碼等功能"
)
/*
@respdoc-200 (GenerateRefreshCodeResp) // 生成成功
@respdoc-400 (
40001: (ErrorResp) 帳號格式錯誤
40004: (ErrorResp) 參數驗證失敗
40010: (ErrorResp) 驗證碼類型無效
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 帳號不存在
@respdoc-429 (ErrorResp) // 請求過於頻繁
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler GenerateRefreshCode
post /generate-code (GenerateRefreshCodeReq) returns (GenerateRefreshCodeResp)
@doc(
summary: "驗證驗證碼"
description: "驗證並使用驗證碼,驗證後會刪除驗證碼"
)
/*
@respdoc-200 (OKResp) // 驗證成功
@respdoc-400 (
40001: (ErrorResp) 帳號格式錯誤
40004: (ErrorResp) 參數驗證失敗
40010: (ErrorResp) 驗證碼類型無效
40011: (ErrorResp) 驗證碼格式錯誤
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 驗證碼不存在
@respdoc-422 (ErrorResp) // 驗證碼無效或已過期
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler VerifyRefreshCode
post /verify-code (VerifyRefreshCodeReq) returns (OKResp)
@doc(
summary: "檢查驗證碼"
description: "檢查驗證碼是否正確,但不刪除驗證碼"
)
/*
@respdoc-200 (OKResp) // 檢查成功
@respdoc-400 (
40001: (ErrorResp) 帳號格式錯誤
40004: (ErrorResp) 參數驗證失敗
40010: (ErrorResp) 驗證碼類型無效
40011: (ErrorResp) 驗證碼格式錯誤
) // 客戶端錯誤
@respdoc-404 (ErrorResp) // 驗證碼不存在
@respdoc-422 (ErrorResp) // 驗證碼無效或已過期
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler CheckRefreshCode
post /check-code (VerifyRefreshCodeReq) returns (OKResp)
@doc(
summary: "驗證 Google 認證"
description: "驗證 Google OAuth 登入是否有效"
)
/*
@respdoc-200 (VerifyGoogleAuthResultResp) // 驗證成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40012: (ErrorResp) Token 格式錯誤
) // 客戶端錯誤
@respdoc-401 (ErrorResp) // Token 無效或過期
@respdoc-422 (ErrorResp) // Google 認證失敗
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler VerifyGoogleAuthResult
post /verify-google (VerifyAuthResultReq) returns (VerifyGoogleAuthResultResp)
@doc(
summary: "驗證平台認證"
description: "驗證平台登入認證是否有效"
)
/*
@respdoc-200 (VerifyAuthResultResp) // 驗證成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40012: (ErrorResp) Token 格式錯誤
) // 客戶端錯誤
@respdoc-401 (ErrorResp) // Token 無效或過期
@respdoc-422 (ErrorResp) // 平台認證失敗
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler VerifyPlatformAuthResult
post /verify-platform (VerifyAuthResultReq) returns (VerifyAuthResultResp)
@doc(
summary: "LINE 獲取 Access Token"
description: "使用 LINE 授權碼獲取 Access Token"
)
/*
@respdoc-200 (LineAccessTokenResp) // 獲取成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40013: (ErrorResp) 授權碼格式錯誤
) // 客戶端錯誤
@respdoc-401 (ErrorResp) // 授權碼無效或過期
@respdoc-422 (ErrorResp) // LINE 認證失敗
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler LineCodeToAccessToken
post /line/token (LineGetTokenReq) returns (LineAccessTokenResp)
@doc(
summary: "LINE 獲取用戶資料"
description: "使用 LINE Access Token 獲取用戶資料"
)
/*
@respdoc-200 (LineUserProfile) // 獲取成功
@respdoc-400 (
40004: (ErrorResp) 參數驗證失敗
40012: (ErrorResp) Token 格式錯誤
) // 客戶端錯誤
@respdoc-401 (ErrorResp) // Token 無效或過期
@respdoc-422 (ErrorResp) // LINE 用戶資料獲取失敗
@respdoc-500 (ErrorResp) // 服務器錯誤
*/
@handler LineGetProfileByAccessToken
post /line/profile (LineGetUserInfoReq) returns (LineUserProfile)
}