backend/internal/types/types.go

297 lines
12 KiB
Go
Raw Normal View History

2025-09-30 16:53:31 +00:00
// Code generated by goctl. DO NOT EDIT.
2026-01-07 02:47:37 +00:00
// goctl 1.8.5
2025-09-30 16:53:31 +00:00
package types
2026-01-07 02:47:37 +00:00
type AddMemberReq struct {
Authorization
RoomID string `json:"room_id" validate:"required"`
UID string `json:"uid" validate:"required"` // 要添加的用戶 UID
}
type Authorization struct {
Authorization string `header:"Authorization" validate:"required"`
}
2025-09-30 16:53:31 +00:00
type BaseReq struct {
}
2026-01-07 02:47:37 +00:00
type CreateRoomReq struct {
Authorization
Name string `json:"name" validate:"required,min=1,max=100"` // 聊天室名稱
Status string `json:"status,optional" validate:"omitempty,oneof=active archived"` // 狀態,預設為 active
}
type CredentialsPayload struct {
2025-10-02 16:16:33 +00:00
Password string `json:"password" validate:"required,min=8,max=128"` // 密碼 (後端應使用 bcrypt 進行雜湊)
PasswordConfirm string `json:"password_confirm" validate:"eqfield=Password"` // 確認密碼
AccountType string `json:"account_type" validate:"required,oneof=email phone any"` // 帳號型別 email phone any
}
2026-01-07 02:47:37 +00:00
type GetUserRoomsResp struct {
Rooms []RoomResp `json:"rooms"`
Total int64 `json:"total"`
}
type IsMemberResp struct {
IsMember bool `json:"is_member"`
}
type ListMembersResp struct {
Members []Member `json:"members"`
Total int64 `json:"total"`
}
type ListMessagesReq struct {
Authorization
RoomID string `path:"room_id" validate:"required"`
BucketDay string `json:"bucket_day,optional"` // yyyyMMdd不提供則使用今天
PageSize int64 `json:"page_size,optional" validate:"omitempty,min=1,max=100"` // 每頁大小,預設 20
LastTS int64 `json:"last_ts,optional"` // 用於 cursor-based pagination
}
type ListMessagesResp struct {
Messages []MessageResp `json:"messages"`
Total int64 `json:"total,optional"` // 總數(僅第一頁返回)
LastTS int64 `json:"last_ts,optional"` // 用於下一頁查詢
}
type ListRoomsReq struct {
Authorization
Status string `json:"status,optional" validate:"omitempty,oneof=active archived"` // 狀態篩選
PageSize int `json:"page_size,optional" validate:"omitempty,min=1,max=100"` // 每頁大小,預設 20
LastID string `json:"last_id,optional"` // 用於 cursor-based pagination
}
type ListRoomsResp struct {
Rooms []RoomResp `json:"rooms"`
LastID string `json:"last_id,optional"` // 用於下一頁查詢
Total int64 `json:"total,optional"` // 總數(僅第一頁返回)
}
type LoginReq struct {
2025-10-02 16:16:33 +00:00
AuthMethod string `json:"auth_method" validate:"required,oneof=credentials platform"` // 驗證類型 credentials platform
LoginID string `json:"login_id" validate:"required,min=3,max=50"` // 信箱或手機號碼
Credentials *CredentialsPayload `json:"credentials,optional"` // AuthMethod 為 'credentials' 時使用
Platform *PlatformPayload `json:"platform,optional"` // AuthMethod 為 'platform' 時使用
}
type LoginResp struct {
UID string `json:"uid"`
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
TokenType string `json:"token_type"` // 通常固定為 "Bearer"
}
2026-01-07 02:47:37 +00:00
type Member struct {
UID string `json:"uid"`
Name string `json:"name"`
Avatar string `json:"avatar"`
}
type MemberResp struct {
RoomID string `json:"room_id"`
UID string `json:"uid"`
Role string `json:"role"`
JoinedAt string `json:"joined_at"`
UpdatedAt string `json:"updated_at"`
}
type MessageResp struct {
RoomID string `json:"room_id"`
BucketDay string `json:"bucket_day"` // yyyyMMdd
TS int64 `json:"ts"` // timestamp
UID string `json:"uid"`
Content string `json:"content"`
}
2025-10-22 13:40:31 +00:00
type MyInfo struct {
Platform string `json:"platform"` // 註冊平台
UID string `json:"uid"` // 用戶 UID
AvatarURL *string `json:"avatar_url,omitempty"` // 頭像 URL
FullName *string `json:"full_name,omitempty"` // 用戶全名
Nickname *string `json:"nickname,omitempty"` // 暱稱
GenderCode *string `json:"gender_code,omitempty"` // 性別代碼
Birthdate *string `json:"birthdate,omitempty"` // 生日 (格式: 1993-04-17)
PhoneNumber *string `json:"phone_number,omitempty"` // 電話
IsPhoneVerified *bool `json:"is_phone_verified,omitempty"` // 手機是否已驗證
Email *string `json:"email,omitempty"` // 信箱
IsEmailVerified *bool `json:"is_email_verified,omitempty"` // 信箱是否已驗證
Address *string `json:"address,omitempty"` // 地址
UserStatus string `json:"user_status,omitempty"` // 用戶狀態
PreferredLanguage string `json:"preferred_language,omitempty"` // 偏好語言
Currency string `json:"currency,omitempty"` // 偏好幣種
AlarmCategory string `json:"alarm_category,omitempty"` // 告警狀態
PostCode *string `json:"post_code,omitempty"` // 郵遞區號
Carrier *string `json:"carrier,omitempty"` // 載具
Role string `json:"role"` // 角色
UpdateAt string `json:"update_at"`
CreateAt string `json:"create_at"`
}
type PagerResp struct {
Total int64 `json:"total"`
Size int64 `json:"size"`
Index int64 `json:"index"`
}
type PlatformPayload struct {
2025-10-02 16:16:33 +00:00
Provider string `json:"provider" validate:"required,oneof=google line apple"` // 平台名稱,目前支援 google line apple
Token string `json:"token" validate:"required"` // 平台提供的 Access Token 或 ID Token
}
type RefreshTokenReq struct {
2025-10-06 13:14:58 +00:00
AccessToken string `json:"access_token" validate:"required"`
RefreshToken string `json:"refresh_token" validate:"required"`
}
type RefreshTokenResp struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"` // 可選:某些策略下刷新後也會換發新的 Refresh Token
TokenType string `json:"token_type"`
}
2026-01-07 02:47:37 +00:00
type RemoveMemberReq struct {
Authorization
RoomID string `path:"room_id" validate:"required"`
UID string `path:"uid" validate:"required"` // 要移除的用戶 UID
}
type RequestPasswordResetReq struct {
2025-10-22 13:40:31 +00:00
Identifier string `json:"identifier" validate:"required"` // 使用者帳號 (信箱或手機)
AccountType string `json:"account_type" validate:"required,oneof=email phone"`
}
type RequestVerificationCodeReq struct {
2025-11-08 06:37:41 +00:00
Account string `json:"account" validate:"required`
Purpose string `json:"purpose" validate:"required,oneof=email_verification phone_verification"`
Authorization
2025-09-30 16:53:31 +00:00
}
type ResetPasswordReq struct {
Identifier string `json:"identifier" validate:"required"`
VerifyCode string `json:"verify_code" validate:"required"` // 來自上一步驗證通過的 Code作為一種「票證」
Password string `json:"password" validate:"required,min=8,max=128"` // 新密碼
PasswordConfirm string `json:"password_confirm" validate:"eqfield=Password"` // 確認新密碼
2025-09-30 16:53:31 +00:00
}
2025-11-04 09:47:36 +00:00
type Resp struct {
Code string `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
Error interface{} `json:"error,omitempty"` // 可選的錯誤信息
2025-10-22 13:40:31 +00:00
}
2025-11-04 09:47:36 +00:00
type RespOK struct {
2025-09-30 16:53:31 +00:00
}
2026-01-07 02:47:37 +00:00
type RoomReq struct {
Authorization
RoomID string `path:"room_id"`
}
type RoomResp struct {
RoomID string `json:"room_id"`
Name string `json:"name"`
Status string `json:"status"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
type SendMessageReq struct {
Authorization
RoomID string `path:"room_id" validate:"required"`
Content string `json:"content" validate:"required,min=1,max=5000"` // 訊息內容
}
type SendMessageResp struct {
RoomID string `json:"room_id"`
BucketDay string `json:"bucket_day"` // yyyyMMdd
TS int64 `json:"ts"` // timestamp
UID string `json:"uid"`
Content string `json:"content"`
}
type SubmitVerificationCodeReq struct {
2025-11-09 09:27:08 +00:00
Account string `json:"account" validate:"required`
Purpose string `json:"purpose" validate:"required,oneof=email_verification phone_verification"`
VerifyCode string `json:"verify_code" validate:"required,len=6"`
Authorization
}
2026-01-07 02:47:37 +00:00
type UpdateMemberRoleReq struct {
Authorization
RoomID string `path:"room_id" validate:"required"`
UID string `path:"uid" validate:"required"`
Role string `json:"role" validate:"required,oneof=admin member"`
}
type UpdatePasswordReq struct {
CurrentPassword string `json:"current_password" validate:"required"`
NewPassword string `json:"new_password" validate:"required,min=8,max=128"`
NewPasswordConfirm string `json:"new_password_confirm" validate:"eqfield=NewPassword"`
Authorization
}
2026-01-07 02:47:37 +00:00
type UpdateRoomReq struct {
Authorization
RoomID string `path:"room_id" validate:"required"`
Name *string `json:"name,optional" validate:"omitempty,min=1,max=100"`
Status *string `json:"status,optional" validate:"omitempty,oneof=active archived"`
}
type UpdateUserInfoReq struct {
AvatarURL *string `json:"avatar_url,optional"` // 頭像 URL
FullName *string `json:"full_name,optional"` // 用戶全名
Nickname *string `json:"nickname,optional"` // 暱稱
GenderCode *string `json:"gender_code,optional" validate:"omitempty,oneof=secret male female"` // 性別
Birthdate *string `json:"birthdate,optional"` // 生日 (格式: 1993-04-17)
Address *string `json:"address,optional"` // 地址
PreferredLanguage *string `json:"preferred_language,optional" validate:"omitempty,oneof=zh-tw en-us"` // 語言
Currency *string `json:"currency,optional" validate:"omitempty,oneof=TWD USD"` // 貨幣代號
National *string `json:"national,optional"` // 國家
PostCode *string `json:"post_code,optional"` // 郵遞區號
Carrier *string `json:"carrier,optional"` // 載具
}
2025-11-12 06:50:35 +00:00
type UploadImgReq struct {
Authorization
Content string `json:"content" validate:"required"` // base64 編碼的圖片內容
}
type UploadResp struct {
FileUrl string `json:"file_url"` // 文件訪問 URL
FileSize int64 `json:"file_size,optional"` // 文件大小bytes
MimeType string `json:"mime_type,optional"` // MIME 類型
}
type UploadVideoReq struct {
Authorization
}
type UserInfoResp struct {
Platform string `json:"platform"` // 註冊平台
UID string `json:"uid"` // 用戶 UID
AvatarURL string `json:"avatar_url"` // 頭像 URL
FullName string `json:"full_name"` // 用戶全名
Nickname string `json:"nickname"` // 暱稱
GenderCode string `json:"gender_code"` // 性別代碼
Birthdate string `json:"birthdate"` // 生日 (格式: 1993-04-17)
PhoneNumber string `json:"phone_number"` // 電話
IsPhoneVerified bool `json:"is_phone_verified"` // 手機是否已驗證
Email string `json:"email"` // 信箱
IsEmailVerified bool `json:"is_email_verified"` // 信箱是否已驗證
Address string `json:"address"` // 地址
UserStatus string `json:"user_status"` // 用戶狀態
PreferredLanguage string `json:"preferred_language"` // 偏好語言
Currency string `json:"currency"` // 偏好幣種
Role string `json:"role"` // 角色
UpdateAt string `json:"update_at"`
CreateAt string `json:"create_at"`
2025-09-30 16:53:31 +00:00
}
type VerifyCodeReq struct {
Identifier string `json:"identifier" validate:"required"`
VerifyCode string `json:"verify_code" validate:"required,len=6"`
2025-09-30 16:53:31 +00:00
}