backend/generate/api/chat.api

352 lines
12 KiB
Plaintext
Raw Normal View History

2026-01-07 02:47:37 +00:00
syntax = "v1"
// =================================================================
// Type: 聊天室 (Chat Room)
// =================================================================
type (
// CreateRoomReq 創建聊天室請求
CreateRoomReq {
Authorization
Name string `json:"name" validate:"required,min=1,max=100"` // 聊天室名稱
Status string `json:"status,optional" validate:"omitempty,oneof=active archived"` // 狀態,預設為 active
}
// UpdateRoomReq 更新聊天室請求
UpdateRoomReq {
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"`
}
// RoomResp 聊天室回應
RoomResp {
RoomID string `json:"room_id"`
Name string `json:"name"`
Status string `json:"status"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
// ListRoomsReq 查詢聊天室列表請求
ListRoomsReq {
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
}
// ListRoomsResp 聊天室列表回應
ListRoomsResp {
Rooms []RoomResp `json:"rooms"`
LastID string `json:"last_id,optional"` // 用於下一頁查詢
Total int64 `json:"total,optional"` // 總數(僅第一頁返回)
}
// AddMemberReq 添加成員請求
AddMemberReq {
Authorization
RoomID string `json:"room_id" validate:"required"`
UID string `json:"uid" validate:"required"` // 要添加的用戶 UID
}
// RemoveMemberReq 移除成員請求
RemoveMemberReq {
Authorization
RoomID string `path:"room_id" validate:"required"`
UID string `path:"uid" validate:"required"` // 要移除的用戶 UID
}
// UpdateMemberRoleReq 更新成員角色請求
UpdateMemberRoleReq {
Authorization
RoomID string `path:"room_id" validate:"required"`
UID string `path:"uid" validate:"required"`
Role string `json:"role" validate:"required,oneof=admin member"`
}
// MemberResp 成員回應
MemberResp {
RoomID string `json:"room_id"`
UID string `json:"uid"`
Role string `json:"role"`
JoinedAt string `json:"joined_at"`
UpdatedAt string `json:"updated_at"`
}
// ListMembersResp 成員列表回應
ListMembersResp {
Members []Member `json:"members"`
Total int64 `json:"total"`
}
// MemberResp 成員回應
Member {
UID string `json:"uid"`
Name string `json:"name"`
Avatar string `json:"avatar"`
}
// GetUserRoomsResp 用戶聊天室列表回應
GetUserRoomsResp {
Rooms []RoomResp `json:"rooms"`
Total int64 `json:"total"`
}
RoomReq {
Authorization
RoomID string `path:"room_id"`
}
)
// =================================================================
// Type: 訊息 (Message)
// =================================================================
type (
// SendMessageReq 發送訊息請求
SendMessageReq {
Authorization
RoomID string `path:"room_id" validate:"required"`
Content string `json:"content" validate:"required,min=1,max=5000"` // 訊息內容
}
// SendMessageResp 發送訊息回應
SendMessageResp {
RoomID string `json:"room_id"`
BucketDay string `json:"bucket_day"` // yyyyMMdd
TS int64 `json:"ts"` // timestamp
UID string `json:"uid"`
Content string `json:"content"`
}
// ListMessagesReq 查詢訊息列表請求
ListMessagesReq {
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
}
// ListMessagesResp 訊息列表回應
ListMessagesResp {
Messages []MessageResp `json:"messages"`
Total int64 `json:"total,optional"` // 總數(僅第一頁返回)
LastTS int64 `json:"last_ts,optional"` // 用於下一頁查詢
}
// MessageResp 訊息回應
MessageResp {
RoomID string `json:"room_id"`
BucketDay string `json:"bucket_day"` // yyyyMMdd
TS int64 `json:"ts"` // timestamp
UID string `json:"uid"`
Content string `json:"content"`
}
IsMemberResp {
IsMember bool `json:"is_member"`
}
)
// =================================================================
// Service: 聊天 API - 需要登入 (Chat Service)
// =================================================================
@server(
group: chat
prefix: /api/v1/chat
schemes: https
timeout: 30s
middleware: AuthMiddleware
)
service gateway {
// ==================== 聊天室管理 ====================
@doc(
summary: "創建聊天室"
description: "創建一個新的聊天室,創建者自動成為管理員"
)
/*
@respdoc-200 (RoomResp) // 建立成功
@respdoc-400 (ErrorResp) "請求參數格式錯誤"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-422 (ErrorResp) "創建太多聊天室了(目前仙梅設定上限)"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler createRoom
post /rooms (CreateRoomReq) returns (RoomResp)
@doc(
summary: "取得聊天室資訊"
description: "根據 room_id 取得聊天室的詳細資訊"
)
/*
@respdoc-200 (RoomResp) // 取得聊天室
@respdoc-400 (ErrorResp) "請求參數格式錯誤"
@respdoc-401 (ErrorResp) "不再房間內的人"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-404 (ErrorResp) "找不到聊天室"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler getRoom
get /rooms/:room_id (RoomReq) returns (RoomResp)
@doc(
summary: "更新聊天室資訊"
description: "更新聊天室的名稱或狀態,需要管理員權限"
)
/*
@respdoc-200 (RoomResp) // 取得聊天室
@respdoc-400 (ErrorResp) "請求參數格式錯誤"
@respdoc-401 (ErrorResp) "不再房間內的人"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-404 (ErrorResp) "找不到聊天室"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler updateRoom
put /rooms/:room_id (UpdateRoomReq) returns (RoomResp)
@doc(
summary: "刪除聊天室"
description: "刪除聊天室及其所有成員和訊息,需要管理員權限"
)
/*
@respdoc-200 (RespOK)
@respdoc-400 (ErrorResp) "請求參數格式錯誤"
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-404 (ErrorResp) "找不到聊天室"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler deleteRoom
delete /rooms/:room_id (RoomReq) returns (RespOK)
@doc(
summary: "查詢聊天室列表"
description: "查詢聊天室列表,支援狀態篩選和分頁(自己的,之後再支援管理員吃全部)"
)
/*
@respdoc-200 (ListRoomsResp) // 取得聊天室列表
@respdoc-400 (ErrorResp) "請求參數格式錯誤"
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-404 (ErrorResp) "找不到聊天室"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler listRooms
get /rooms (ListRoomsReq) returns (ListRoomsResp)
// ==================== 成員管理 ====================
@doc(
summary: "添加成員到聊天室"
description: "將用戶添加到聊天室,需要管理員權限"
)
/*
@respdoc-200 (MemberResp) // 取得聊天室列表
@respdoc-400 (ErrorResp) "請求參數格式錯誤"
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-404 (ErrorResp) "找不到聊天室"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler addMember
post /rooms/:room_id/members (AddMemberReq) returns (MemberResp)
@doc(
summary: "移除聊天室成員"
description: "將成員從聊天室中移除,需要管理員權限或本人操作"
)
/*
@respdoc-200 (RespOK)
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-404 (ErrorResp) "找不到聊天室"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler removeMember
delete /rooms/:room_id/members/:uid (RemoveMemberReq) returns (RespOK)
@doc(
summary: "更新成員角色"
description: "更新成員在聊天室中的角色,需要管理員權限"
)
/*
@respdoc-200 (MemberResp)
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-404 (ErrorResp) "找不到聊天室"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler updateMemberRole
put /rooms/:room_id/members/:uid/role (UpdateMemberRoleReq) returns (MemberResp)
@doc(
summary: "查詢聊天室成員列表"
description: "查詢指定聊天室的所有成員"
)
/*
@respdoc-200 (ListMembersResp)
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler listMembers
get /rooms/:room_id/members (RoomReq) returns (ListMembersResp)
// ==================== 用戶相關 ====================
@doc(
summary: "查詢用戶所在的聊天室"
description: "查詢當前用戶或指定用戶所在的所有聊天室"
)
/*
@respdoc-200 (GetUserRoomsResp)
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler getUserRooms
get /users/rooms (Authorization) returns (GetUserRoomsResp)
@doc(
summary: "檢查用戶是否在聊天室中"
description: "檢查指定用戶是否在某個聊天室中"
)
/*
@respdoc-200 (IsMemberResp)
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler checkUserInRoom
get /rooms/:room_id/members/:uid (RemoveMemberReq) returns (IsMemberResp)
// ==================== 訊息相關 ====================
@doc(
summary: "發送訊息"
description: "在聊天室中發送訊息,需要是聊天室成員"
)
/*
@respdoc-200 (RespOK)
@respdoc-400 (ErrorResp) "請求參數格式錯誤"
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler sendMessage
post /rooms/:room_id/messages (SendMessageReq) returns (RespOK)
@doc(
summary: "查詢訊息列表"
description: "查詢聊天室中的訊息列表,支援分頁和按日期篩選"
)
/*
@respdoc-200 (ListMessagesResp)
@respdoc-400 (ErrorResp) "請求參數格式錯誤"
@respdoc-401 (ErrorResp) "權限不夠"
@respdoc-403 (ErrorResp) "沒有登入"
@respdoc-500 (ErrorResp) // 伺服器內部錯誤
*/
@handler listMessages
get /rooms/:room_id/messages (ListMessagesReq) returns (ListMessagesResp)
}