Files
my-v0-server/app/api/conversations.py
T

57 lines
1.8 KiB
Python

"""会话创建与历史查询接口"""
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)
)