derm-ai / app /routers /chat_session.py
muhammadnoman76's picture
update
75e2b6c
raw
history blame
3.54 kB
# 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
@router.post('/chat-sessions', status_code=201)
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))
@router.get('/chat-sessions')
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))
@router.delete('/chat-sessions/{session_id}')
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))
@router.put('/chat-sessions/{session_id}/title')
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))
@router.delete('/chat-sessions/all')
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))
@router.get('/chats/session/{session_id}')
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))