59 lines
2.2 KiB
Python

# File: backend/app/api/v1/endpoints/sessions.py (新建)
# Description: 会话管理的 API 路由
from fastapi import APIRouter, HTTPException, Depends, status
from typing import List
from app.models.pydantic_models import SessionRead, SessionCreateRequest, SessionCreateResponse
from app.services.session_service import session_service_instance, SessionService
router = APIRouter()
def get_session_service() -> SessionService:
return session_service_instance
@router.post("/", response_model=SessionCreateResponse, status_code=status.HTTP_201_CREATED)
async def create_new_session(
session_data: SessionCreateRequest,
service: SessionService = Depends(get_session_service)
):
"""创建新会话并自动生成标题"""
try:
return await service.create_session(session_data)
except ValueError as e:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))
except Exception as e:
# 处理可能的 LLM 调用错误
print(f"创建会话时出错: {e}")
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="创建会话失败")
@router.get("/assistant/{assistant_id}", response_model=List[SessionRead])
async def read_sessions_for_assistant(
assistant_id: str,
service: SessionService = Depends(get_session_service)
):
"""获取指定助手的所有会话列表"""
# TODO: 添加检查助手是否存在
return service.get_sessions_by_assistant(assistant_id)
@router.get("/{session_id}", response_model=SessionRead)
async def read_session_by_id(
session_id: str,
service: SessionService = Depends(get_session_service)
):
"""获取单个会话信息"""
session = service.get_session(session_id)
if not session:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="找不到指定的会话")
return session
@router.delete("/{session_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_existing_session(
session_id: str,
service: SessionService = Depends(get_session_service)
):
"""删除指定 ID 的会话"""
deleted = service.delete_session(session_id)
if not deleted:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="找不到指定的会话")