@@ -1,56 +1,112 @@
from fastapi import APIRouter , HTTPException , status
# TODO: 实现 ChatService 来替代旧的 ChatHistory 逻辑
# from services.chat_service import ChatService
from pathlib import Path
try :
from backend . services . chat_service import ChatService
from backend . core . config import settings
except ImportError :
# Docker环境: 直接从当前目录导入
from services . chat_service import ChatService
from core . config import settings
router = APIRouter ( prefix = " /chat " , tags = [ " chat " ] )
# 初始化聊天服务
data_path = Path ( settings . DATA_PATH ) if hasattr ( settings , ' DATA_PATH ' ) else Path ( " data " )
chat_service = ChatService ( data_path )
@router.get ( " " , response_model = dict )
async def list_all_chats ( ) :
""" 获取所有角色的所有聊天列表 """
# return await C hatS ervice. list_all_chats( )
return { " chats " : [ ] }
return c hat_s ervice. list_all_chats( )
@router.get ( " / {role_name} " )
async def list_role_chats ( role_name : str ) :
""" 获取指定角色的所有聊天列表 """
try :
all_chats = chat_service . list_all_chats ( )
# 从所有聊天中筛选出该角色的聊天
role_chats = all_chats . get ( role_name , [ ] )
return role_chats
except Exception as e :
raise HTTPException ( status_code = 500 , detail = str ( e ) )
@router.get ( " / {role_name} / {chat_name} " )
async def get_chat ( role_name : str , chat_name : str ) :
""" 获取指定聊天的完整内容 """
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
try :
return chat_service . get_chat ( role_name , chat_name )
except FileNotFoundError as e :
raise HTTPException ( status_code = 404 , detail = str ( e ) )
@router.post ( " / {role_name} " , status_code = status . HTTP_201_CREATED )
async def create_chat ( role_name : str , chat_name : str , meta data : dict = None ) :
async def create_chat ( role_name : str , chat_data : dict ) :
""" 创建新聊天 """
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
try :
chat_name = chat_data . get ( " chat_name " , " 新聊天 " )
metadata = chat_data . get ( " metadata " , { } )
return chat_service . create_chat ( role_name , chat_name , metadata )
except FileExistsError as e :
raise HTTPException ( status_code = 400 , detail = str ( e ) )
@router.put ( " / {role_name} / {chat_name} " )
async def update_chat ( role_name : str , chat_name : str , update_data : dict ) :
""" 更新聊天元数据 """
# TODO: 实现更新聊天元数据功能
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
@router.delete ( " / {role_name} / {chat_name} " )
async def delete_chat ( role_name : str , chat_name : str ) :
""" 删除指定聊天 """
# TODO: 实现删除聊天功能
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
@router.get ( " / {role_name} / {chat_name} /messages " )
async def list_messages ( role_name : str , chat_name : str ) :
""" 获取聊天的所有消息 """
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
try :
chat_data = chat_service . get_chat ( role_name , chat_name )
return { " messages " : chat_data [ " messages " ] }
except FileNotFoundError as e :
raise HTTPException ( status_code = 404 , detail = str ( e ) )
@router.get ( " / {role_name} / {chat_name} /messages/ {floor} " )
async def get_message ( role_name : str , chat_name : str , floor : int ) :
""" 获取指定楼层的消息 """
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
try :
chat_data = chat_service . get_chat ( role_name , chat_name )
for msg in chat_data [ " messages " ] :
if msg . get ( " floor " ) == floor :
return msg
raise HTTPException ( status_code = 404 , detail = f " Message at floor { floor } not found " )
except FileNotFoundError as e :
raise HTTPException ( status_code = 404 , detail = str ( e ) )
@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 ) :
""" 向聊天添加新消息 """
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
try :
return chat_service . add_message ( role_name , chat_name , message_data )
except FileNotFoundError as e :
raise HTTPException ( status_code = 404 , detail = str ( e ) )
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 ) :
""" 更新指定楼层的消息 """
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
try :
return chat_service . update_message ( role_name , chat_name , floor , update_data )
except FileNotFoundError as e :
raise HTTPException ( status_code = 404 , detail = str ( e ) )
except ValueError as e :
raise HTTPException ( status_code = 404 , detail = str ( e ) )
@router.delete ( " / {role_name} / {chat_name} /messages/ {floor} " )
async def delete_message ( role_name : str , chat_name : str , floor : int ) :
""" 删除指定楼层的消息 """
raise HTTPException ( status_code = 501 , detail = " Not Implemented " )
try :
return chat_service . delete_message ( role_name , chat_name , floor )
except FileNotFoundError as e :
raise HTTPException ( status_code = 404 , detail = str ( e ) )
except ValueError as e :
raise HTTPException ( status_code = 404 , detail = str ( e ) )