98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
from fastapi import APIRouter, HTTPException, status
|
|
from backend.core.models.chat_history import ChatHistory, Message
|
|
|
|
router = APIRouter(prefix="/chats", tags=["chats"])
|
|
|
|
|
|
# ========== 聊天历史基础路由 ==========
|
|
|
|
@router.get("", response_model=dict)
|
|
async def list_all_chats():
|
|
"""获取所有角色的所有聊天列表"""
|
|
return await ChatHistory.list_all_chats()
|
|
|
|
|
|
@router.get("/{role_name}/{chat_name}")
|
|
async def get_chat(role_name: str, chat_name: str):
|
|
"""获取指定聊天的完整内容"""
|
|
try:
|
|
return await ChatHistory.get_chat(role_name, chat_name)
|
|
except FileNotFoundError as e:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
|
|
|
|
@router.post("/{role_name}", status_code=status.HTTP_201_CREATED)
|
|
async def create_chat(role_name: str, chat_name: str, metadata: dict = None):
|
|
"""创建新聊天"""
|
|
try:
|
|
return await ChatHistory.create_chat(role_name, chat_name, metadata)
|
|
except FileExistsError:
|
|
raise HTTPException(status_code=400, detail="Chat already exists")
|
|
|
|
|
|
@router.put("/{role_name}/{chat_name}")
|
|
async def update_chat(role_name: str, chat_name: str, update_data: dict):
|
|
"""更新聊天元数据"""
|
|
try:
|
|
return await ChatHistory.update_chat(role_name, chat_name, update_data)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
|
|
|
|
@router.delete("/{role_name}/{chat_name}")
|
|
async def delete_chat(role_name: str, chat_name: str):
|
|
"""删除指定聊天"""
|
|
try:
|
|
return await ChatHistory.delete_chat(role_name, chat_name)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
|
|
|
|
# ========== 聊天消息路由 ==========
|
|
|
|
@router.get("/{role_name}/{chat_name}/messages")
|
|
async def list_messages(role_name: str, chat_name: str):
|
|
"""获取聊天的所有消息"""
|
|
try:
|
|
return await ChatHistory.list_messages(role_name, chat_name)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
|
|
|
|
@router.get("/{role_name}/{chat_name}/messages/{floor}")
|
|
async def get_message(role_name: str, chat_name: str, floor: int):
|
|
"""获取指定楼层的消息"""
|
|
try:
|
|
return await ChatHistory.get_message(role_name, chat_name, floor)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
|
|
|
|
@router.post("/{role_name}/{chat_name}/messages", status_code=status.HTTP_201_CREATED)
|
|
async def add_message(role_name: str, chat_name: str, message_data: dict):
|
|
"""向聊天添加新消息"""
|
|
try:
|
|
return await ChatHistory.add_message(role_name, chat_name, message_data)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
|
|
|
|
@router.put("/{role_name}/{chat_name}/messages/{floor}")
|
|
async def update_message(role_name: str, chat_name: str, floor: int, update_data: dict):
|
|
"""更新指定楼层的消息"""
|
|
try:
|
|
return await ChatHistory.update_message(role_name, chat_name, floor, update_data)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
|
|
|
|
@router.delete("/{role_name}/{chat_name}/messages/{floor}")
|
|
async def delete_message(role_name: str, chat_name: str, floor: int):
|
|
"""删除指定楼层的消息"""
|
|
try:
|
|
return await ChatHistory.delete_message(role_name, chat_name, floor)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|