chat_openapi.json 32 KB

1
  1. {"openapi":"3.1.0","info":{"title":"Instant Chat API","description":"Teaching MVP for instant messaging and moments.","version":"0.1.0"},"paths":{"/api/health":{"get":{"tags":["system"],"summary":"Health Check","description":"返回用于本地和容器检查的存活状态。","operationId":"health_check_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Check Api Health Get"}}}}}}},"/api/meta":{"get":{"tags":["system"],"summary":"App Meta","description":"返回教学页面使用的非敏感应用构建信息。","operationId":"app_meta_api_meta_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response App Meta Api Meta Get"}}}}}}},"/api/auth/register":{"post":{"tags":["认证"],"summary":"Register","description":"FR-USER-001:注册用户并立即建立登录会话。","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["认证"],"summary":"Login","description":"FR-USER-002:校验账号密码并返回访问令牌。","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me":{"get":{"tags":["用户"],"summary":"Get Current User Profile","description":"FR-USER-003:获取当前用户的公开资料。","operationId":"get_current_user_profile_api_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["用户"],"summary":"Update Current User Profile","description":"FR-USER-003:修改当前用户允许公开的资料。","operationId":"update_current_user_profile_api_users_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/users/me/avatar":{"put":{"tags":["用户"],"summary":"Set Current User Avatar","description":"将当前用户上传的未绑定图片设置为头像。","operationId":"set_current_user_avatar_api_users_me_avatar_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetAvatarRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/friendships":{"post":{"tags":["好友"],"summary":"Add Friend","description":"创建好友申请。","operationId":"add_friend_api_friendships_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendshipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["好友"],"summary":"Get Friendships","description":"查询当前用户参与的好友申请和关系。","operationId":"get_friendships_api_friendships_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(pending|accepted|rejected)$"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendshipListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/friendships/{friendship_id}/accept":{"post":{"tags":["好友"],"summary":"Accept Friend","description":"同意好友申请。","operationId":"accept_friend_api_friendships__friendship_id__accept_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"friendship_id","in":"path","required":true,"schema":{"type":"string","title":"Friendship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendshipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/friendships/{friendship_id}/reject":{"post":{"tags":["好友"],"summary":"Reject Friend","description":"拒绝好友申请。","operationId":"reject_friend_api_friendships__friendship_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"friendship_id","in":"path","required":true,"schema":{"type":"string","title":"Friendship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendshipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/friendships/{friendship_id}":{"delete":{"tags":["好友"],"summary":"Remove Friend","description":"删除已建立的好友关系。","operationId":"remove_friend_api_friendships__friendship_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"friendship_id","in":"path","required":true,"schema":{"type":"string","title":"Friendship Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/conversations":{"get":{"tags":["聊天"],"summary":"Get Conversation List","description":"查询当前用户参与的会话。","operationId":"get_conversation_list_api_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConversationResponse"},"title":"Response Get Conversation List Api Conversations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/conversations/direct":{"post":{"tags":["聊天"],"summary":"Create Direct Conversation","description":"创建或获取好友之间的一对一会话。","operationId":"create_direct_conversation_api_conversations_direct_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConversationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/conversations/group":{"post":{"tags":["聊天"],"summary":"Create Group Chat","description":"创建至少三人、最多五十人的好友群聊。","operationId":"create_group_chat_api_conversations_group_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupConversationRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/conversations/{conversation_id}/members":{"post":{"tags":["聊天"],"summary":"Invite Members","description":"由已有群成员邀请自己的好友加入群聊。","operationId":"invite_members_api_conversations__conversation_id__members_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteGroupMembersRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/conversations/{conversation_id}/messages":{"get":{"tags":["聊天"],"summary":"Get Message History","description":"查询当前用户有权访问的历史消息。","operationId":"get_message_history_api_conversations__conversation_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagePageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["聊天"],"summary":"Send Message","description":"提供 REST 消息发送入口,WebSocket 将复用同一业务服务。","operationId":"send_message_api_conversations__conversation_id__messages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/images":{"post":{"tags":["文件"],"summary":"Upload Image","description":"上传图片并创建一个尚未绑定动态的图片资源。","operationId":"upload_image_api_files_images_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_image_api_files_images_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/files/images/{file_id}":{"get":{"tags":["文件"],"summary":"Access Image","description":"校验动态可见性后返回图片文件。","operationId":"access_image_api_files_images__file_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/moments":{"post":{"tags":["朋友圈"],"summary":"Publish Moment","description":"发布文字、图片或图文混合动态。","operationId":"publish_moment_api_moments_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMomentRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MomentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["朋友圈"],"summary":"Get Moment List","description":"查询当前用户和好友的动态列表。","operationId":"get_moment_list_api_moments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"author_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64},{"type":"null"}],"title":"Author Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MomentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/moments/{moment_id}":{"delete":{"tags":["朋友圈"],"summary":"Delete Moment Route","description":"软删除当前用户自己的动态。","operationId":"delete_moment_route_api_moments__moment_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"moment_id","in":"path","required":true,"schema":{"type":"string","title":"Moment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/moments/{moment_id}/comments":{"get":{"tags":["朋友圈"],"summary":"Get Comment List","description":"查询当前用户有权查看的动态评论。","operationId":"get_comment_list_api_moments__moment_id__comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"moment_id","in":"path","required":true,"schema":{"type":"string","title":"Moment Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["朋友圈"],"summary":"Publish Comment","description":"发布评论并为动态作者创建通知。","operationId":"publish_comment_api_moments__moment_id__comments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"moment_id","in":"path","required":true,"schema":{"type":"string","title":"Moment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommentRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/moments/{moment_id}/like":{"post":{"tags":["朋友圈"],"summary":"Like Moment","description":"点赞动态,重复请求保持幂等。","operationId":"like_moment_api_moments__moment_id__like_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"moment_id","in":"path","required":true,"schema":{"type":"string","title":"Moment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MomentLikeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["朋友圈"],"summary":"Unlike Moment","description":"取消点赞,重复取消保持幂等。","operationId":"unlike_moment_api_moments__moment_id__like_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"moment_id","in":"path","required":true,"schema":{"type":"string","title":"Moment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MomentLikeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications":{"get":{"tags":["通知"],"summary":"Get Notification List","description":"查询当前用户的通知和未读数量。","operationId":"get_notification_list_api_notifications_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications/read":{"post":{"tags":["通知"],"summary":"Read Notifications","description":"批量标记当前用户拥有的通知为已读。","operationId":"read_notifications_api_notifications_read_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkNotificationsReadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkNotificationsReadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"AuthResponse":{"properties":{"user":{"$ref":"#/components/schemas/UserProfile"},"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["user","access_token"],"title":"AuthResponse","description":"注册或登录成功后的认证响应。"},"Body_upload_image_api_files_images_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_image_api_files_images_post"},"CommentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CommentResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"CommentListResponse","description":"朋友圈评论列表响应。"},"CommentResponse":{"properties":{"id":{"type":"string","title":"Id"},"author":{"$ref":"#/components/schemas/UserSummary"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","author","content","created_at"],"title":"CommentResponse","description":"朋友圈评论详情。"},"ConversationMemberResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"last_read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Read At"},"user":{"$ref":"#/components/schemas/UserProfile"}},"type":"object","required":["user_id","user"],"title":"ConversationMemberResponse","description":"会话成员的基础信息。"},"ConversationResponse":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"direct_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direct Key"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"members":{"items":{"$ref":"#/components/schemas/ConversationMemberResponse"},"type":"array","title":"Members"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","kind","direct_key","members","created_at"],"title":"ConversationResponse","description":"一对一会话响应。"},"CreateCommentRequest":{"properties":{"content":{"type":"string","maxLength":1000,"minLength":1,"title":"Content"}},"type":"object","required":["content"],"title":"CreateCommentRequest","description":"发布朋友圈评论时提交的内容。"},"CreateConversationRequest":{"properties":{"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["user_id"],"title":"CreateConversationRequest","description":"创建一对一会话时提交好友用户 ID。"},"CreateGroupConversationRequest":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"user_ids":{"items":{"type":"string"},"type":"array","maxItems":49,"minItems":2,"title":"User Ids"}},"type":"object","required":["name","user_ids"],"title":"CreateGroupConversationRequest","description":"创建群聊时提交群名称和要邀请的好友 ID。"},"CreateMomentRequest":{"properties":{"content":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Content"},"image_ids":{"items":{"type":"string"},"type":"array","maxItems":9,"title":"Image Ids"},"visibility":{"type":"string","const":"friends","title":"Visibility","default":"friends"}},"type":"object","title":"CreateMomentRequest","description":"发布朋友圈时提交的文字、图片资源和可见范围。"},"FriendRequest":{"properties":{"username":{"type":"string","maxLength":32,"minLength":3,"title":"Username"}},"type":"object","required":["username"],"title":"FriendRequest","description":"发起好友申请时提交目标用户名。"},"FriendshipListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FriendshipResponse"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"FriendshipListResponse","description":"好友关系分页响应。"},"FriendshipResponse":{"properties":{"id":{"type":"string","title":"Id"},"requester_id":{"type":"string","title":"Requester Id"},"addressee_id":{"type":"string","title":"Addressee Id"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"requester":{"$ref":"#/components/schemas/UserSummary"},"addressee":{"$ref":"#/components/schemas/UserSummary"}},"type":"object","required":["id","requester_id","addressee_id","status","created_at","requester","addressee"],"title":"FriendshipResponse","description":"好友申请或已建立好友关系的响应结构。"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImageUploadResponse":{"properties":{"id":{"type":"string","title":"Id"},"storage_key":{"type":"string","title":"Storage Key"},"url":{"type":"string","title":"Url"},"mime_type":{"type":"string","title":"Mime Type"},"size_bytes":{"type":"integer","title":"Size Bytes"}},"type":"object","required":["id","storage_key","url","mime_type","size_bytes"],"title":"ImageUploadResponse","description":"图片上传成功后返回的资源信息。"},"InviteGroupMembersRequest":{"properties":{"user_ids":{"items":{"type":"string"},"type":"array","maxItems":49,"minItems":1,"title":"User Ids"}},"type":"object","required":["user_ids"],"title":"InviteGroupMembersRequest","description":"邀请好友加入已有群聊。"},"MarkNotificationsReadRequest":{"properties":{"notification_ids":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Notification Ids"}},"type":"object","title":"MarkNotificationsReadRequest","description":"批量标记通知已读时提交的通知 ID。"},"MarkNotificationsReadResponse":{"properties":{"updated_count":{"type":"integer","title":"Updated Count"}},"type":"object","required":["updated_count"],"title":"MarkNotificationsReadResponse","description":"批量标记已读后的更新数量。"},"MessagePageResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MessageResponse"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"MessagePageResponse","description":"消息历史分页响应。"},"MessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"conversation_id":{"type":"string","title":"Conversation Id"},"sender_id":{"type":"string","title":"Sender Id"},"client_message_id":{"type":"string","title":"Client Message Id"},"message_type":{"type":"string","title":"Message Type"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At"}},"type":"object","required":["id","conversation_id","sender_id","client_message_id","message_type","content","created_at"],"title":"MessageResponse","description":"消息对外返回结构。"},"MomentImageResponse":{"properties":{"id":{"type":"string","title":"Id"},"storage_key":{"type":"string","title":"Storage Key"},"original_name":{"type":"string","title":"Original Name"},"mime_type":{"type":"string","title":"Mime Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"sort_order":{"type":"integer","title":"Sort Order"},"url":{"type":"string","title":"Url"}},"type":"object","required":["id","storage_key","original_name","mime_type","size_bytes","sort_order","url"],"title":"MomentImageResponse","description":"动态中的图片元数据和访问地址。"},"MomentLikeResponse":{"properties":{"moment_id":{"type":"string","title":"Moment Id"},"like_count":{"type":"integer","title":"Like Count"},"liked_by_me":{"type":"boolean","title":"Liked By Me"}},"type":"object","required":["moment_id","like_count","liked_by_me"],"title":"MomentLikeResponse","description":"点赞操作后的当前状态。"},"MomentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MomentResponse"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"MomentListResponse","description":"朋友圈动态分页响应。"},"MomentResponse":{"properties":{"id":{"type":"string","title":"Id"},"author":{"$ref":"#/components/schemas/UserSummary"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"visibility":{"type":"string","title":"Visibility"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"images":{"items":{"$ref":"#/components/schemas/MomentImageResponse"},"type":"array","title":"Images"},"like_count":{"type":"integer","title":"Like Count","default":0},"liked_by_me":{"type":"boolean","title":"Liked By Me","default":false}},"type":"object","required":["id","author","content","visibility","created_at","images"],"title":"MomentResponse","description":"朋友圈动态详情。"},"NotificationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NotificationResponse"},"type":"array","title":"Items"},"unread_count":{"type":"integer","title":"Unread Count"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items","unread_count"],"title":"NotificationListResponse","description":"当前用户的通知列表和未读数量。"},"NotificationResponse":{"properties":{"id":{"type":"string","title":"Id"},"actor":{"anyOf":[{"$ref":"#/components/schemas/UserSummary"},{"type":"null"}]},"notification_type":{"type":"string","title":"Notification Type"},"related_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Id"},"is_read":{"type":"boolean","title":"Is Read"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","notification_type","is_read","created_at"],"title":"NotificationResponse","description":"通知详情,actor 为空时表示系统通知。"},"SendMessageRequest":{"properties":{"client_message_id":{"type":"string","maxLength":64,"minLength":1,"title":"Client Message Id"},"message_type":{"type":"string","enum":["text","image"],"title":"Message Type","default":"text"},"content":{"type":"string","maxLength":5000,"minLength":1,"title":"Content"}},"type":"object","required":["client_message_id","content"],"title":"SendMessageRequest","description":"发送文本消息时提交的内容和客户端幂等键。"},"SetAvatarRequest":{"properties":{"image_id":{"type":"string","maxLength":64,"minLength":1,"title":"Image Id"}},"type":"object","required":["image_id"],"title":"SetAvatarRequest","description":"绑定已经上传、但尚未绑定动态的头像图片。"},"UpdateProfileRequest":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Display Name"},"avatar_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Avatar Url"}},"type":"object","title":"UpdateProfileRequest","description":"修改当前用户公开资料时允许提交的字段。"},"UserLoginRequest":{"properties":{"username":{"type":"string","maxLength":32,"minLength":3,"title":"Username"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["username","password"],"title":"UserLoginRequest","description":"用户登录时提交的字段。"},"UserProfile":{"properties":{"id":{"type":"string","title":"Id"},"username":{"type":"string","title":"Username"},"display_name":{"type":"string","title":"Display Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","username","display_name"],"title":"UserProfile","description":"对外返回的用户资料,不包含密码哈希。"},"UserRegisterRequest":{"properties":{"username":{"type":"string","maxLength":32,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","title":"Username"},"display_name":{"type":"string","maxLength":64,"minLength":1,"title":"Display Name"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"confirm_password":{"type":"string","maxLength":128,"minLength":8,"title":"Confirm Password"}},"type":"object","required":["username","display_name","password","confirm_password"],"title":"UserRegisterRequest","description":"用户注册时提交的字段。"},"UserSummary":{"properties":{"id":{"type":"string","title":"Id"},"username":{"type":"string","title":"Username"},"display_name":{"type":"string","title":"Display Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","username","display_name"],"title":"UserSummary","description":"好友关系中展示的最小用户信息。"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}