"""会话创建与历史查询接口""" from typing import Annotated from fastapi import APIRouter, Depends, Query, Request from app.common.response import ApiResponse, success_response from app.core.auth import get_current_user from app.core.exceptions import BizException from app.schemas.conversation import ( ConversationCreated, ConversationDetail, ConversationList, ) from app.schemas.user import CurrentUser router = APIRouter(prefix="/conversations", tags=["Conversation"]) @router.post("") async def create_conversation( request: Request, user: CurrentUser = Depends(get_current_user) ) -> ApiResponse[ConversationCreated]: store = request.app.state.conversation_store return success_response( ConversationCreated(conversation_id=await store.create(user.id)) ) @router.get("") async def list_conversations( request: Request, user: Annotated[CurrentUser, Depends(get_current_user)], limit: Annotated[int, Query(ge=1, le=100)] = 20, offset: Annotated[int, Query(ge=0)] = 0, ) -> ApiResponse[ConversationList]: store = request.app.state.conversation_store return success_response( ConversationList(conversations=await store.list_by_user(user.id, limit, offset)) ) @router.get("/{conversation_id}") async def get_conversation( conversation_id: str, request: Request, user: CurrentUser = Depends(get_current_user), ) -> ApiResponse[ConversationDetail]: store = request.app.state.conversation_store # 他人的会话与不存在同样返回 404 if not await store.exists(conversation_id, user.id): raise BizException(404, "会话不存在或已过期") turns = await store.load_turns(conversation_id, None) return success_response( ConversationDetail(conversation_id=conversation_id, turns=turns) )