Spaces:
Running
Running
# app/routers/chat_session.py | |
from datetime import datetime | |
from bson import ObjectId | |
from fastapi import APIRouter, Depends, HTTPException | |
from pydantic import BaseModel | |
from app.database.database_query import DatabaseQuery | |
from app.middleware.auth import get_current_user | |
router = APIRouter() | |
query = DatabaseQuery() | |
class ChatSessionTitleUpdate(BaseModel): | |
title: str | |
async def create_chat_session(username: str = Depends(get_current_user)): | |
try: | |
session_id = str(ObjectId()) | |
chat_session = { | |
"user_id": username, | |
"session_id": session_id, | |
"created_at": datetime.utcnow(), | |
"last_accessed": datetime.utcnow(), | |
"title": "New Chat" | |
} | |
query.create_chat_session(chat_session) | |
return {"message": "Chat session created", "session_id": session_id} | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def get_user_chat_sessions(username: str = Depends(get_current_user)): | |
try: | |
sessions = query.get_user_chat_sessions(username) | |
return sessions | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def delete_chat_session(session_id: str, username: str = Depends(get_current_user)): | |
try: | |
result = query.delete_chat_session(session_id, username) | |
if result["session_deleted"]: | |
return { | |
"message": "Chat session and associated chats deleted successfully", | |
"chats_deleted": result["chats_deleted"] | |
} | |
raise HTTPException(status_code=404, detail="Chat session not found or unauthorized") | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def update_chat_title( | |
session_id: str, | |
title_data: ChatSessionTitleUpdate, | |
username: str = Depends(get_current_user) | |
): | |
try: | |
new_title = title_data.title | |
if not query.verify_session(session_id, username): | |
raise HTTPException(status_code=404, detail="Chat session not found or unauthorized") | |
if query.update_chat_session_title(session_id, new_title): | |
return { | |
'message': 'Chat session title updated successfully', | |
'session_id': session_id, | |
'new_title': new_title | |
} | |
raise HTTPException(status_code=500, detail="Failed to update chat session title") | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def delete_all_sessions_and_chats(username: str = Depends(get_current_user)): | |
try: | |
result = query.delete_all_user_sessions_and_chats(username) | |
return { | |
"message": "Successfully deleted all chat sessions and chats", | |
"deleted_chats": result["deleted_chats"], | |
"deleted_sessions": result["deleted_sessions"] | |
} | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def get_session_chats(session_id: str, username: str = Depends(get_current_user)): | |
try: | |
chats = query.get_session_chats(session_id, username) | |
return chats | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) |