""" 对话 feature — conversations 路由 """ from fastapi import APIRouter, Depends from app.core.deps_types import CurrentUserDep from app.core.logging import get_logger from app.core.openapi import error_responses from app.features.conversation.deps import get_conversation_service from app.features.conversation.schemas import ( ConversationDetailResponse, ConversationListItemResponse, CreateConversationResponse, DeleteConversationResponse, EndConversationResponse, MessageResponse, OrganizeResponse, ) from app.features.conversation.service import ConversationService router = APIRouter( prefix="/api/conversations", tags=["conversations"], responses=error_responses(401, 403, 404, 429), ) logger = get_logger(__name__) @router.get("", response_model=list[ConversationListItemResponse]) async def get_conversations( current_user: CurrentUserDep, service: ConversationService = Depends(get_conversation_service), ): """获取当前用户的所有对话列表(需要认证)""" return await service.list_for_user(current_user.id) @router.post("", response_model=CreateConversationResponse) async def create_conversation( current_user: CurrentUserDep, service: ConversationService = Depends(get_conversation_service), ): """创建新对话(需要认证)。对话轮数在每次发送消息时校验。""" return await service.create(current_user.id) @router.get("/{conversation_id}", response_model=ConversationDetailResponse) async def get_conversation( conversation_id: str, current_user: CurrentUserDep, service: ConversationService = Depends(get_conversation_service), ): """获取对话详情(需要认证,只能访问自己的对话)""" return await service.get_one(conversation_id, current_user.id) @router.post("/{conversation_id}/end", response_model=EndConversationResponse) async def end_conversation( conversation_id: str, current_user: CurrentUserDep, service: ConversationService = Depends(get_conversation_service), ): """结束对话(需要认证,只能结束自己的对话)""" return await service.end(conversation_id, current_user.id) @router.delete("/{conversation_id}", response_model=DeleteConversationResponse) async def delete_conversation( conversation_id: str, current_user: CurrentUserDep, service: ConversationService = Depends(get_conversation_service), ): """删除对话(需要认证,只能删除自己的对话)""" await service.delete(conversation_id, current_user.id) return {"message": "对话已删除"} @router.get("/{conversation_id}/messages", response_model=list[MessageResponse]) async def get_messages( conversation_id: str, current_user: CurrentUserDep, service: ConversationService = Depends(get_conversation_service), ): """获取对话的消息列表(需要认证,只能访问自己的对话)""" return await service.get_messages(conversation_id, current_user.id) @router.post("/{conversation_id}/organize", response_model=OrganizeResponse) async def organize_conversation( conversation_id: str, current_user: CurrentUserDep, service: ConversationService = Depends(get_conversation_service), ): """ 整理对话内容成章节(需要认证,只能整理自己的对话) 手动触发对话整理,将对话中的内容整理成回忆录章节 """ return await service.organize( conversation_id, current_user.id, current_user.subscription_type, )