""" MediGenius — api/v1/endpoints/session.py Session management endpoints: /history, /sessions, /session/{id}. """ import uuid from fastapi import APIRouter, Request from app.services.database_service import db_service router = APIRouter(tags=["Session"]) def _get_session_id(request: Request) -> str: """Get or create a session ID from X-Session-ID header or cookie session.""" session_id = request.headers.get("X-Session-ID") if session_id: return session_id if "session_id" not in request.session: request.session["session_id"] = str(uuid.uuid4()) return request.session["session_id"] @router.get("/history") async def get_history_endpoint(req: Request): """Return the chat history for the current session.""" return { "messages": db_service.get_chat_history(_get_session_id(req)), "success": True, } @router.get("/sessions") async def get_sessions_endpoint(): """Return a list of all chat sessions with previews.""" return {"sessions": db_service.get_all_sessions(), "success": True} @router.get("/session/{session_id}") async def load_session_endpoint(session_id: str, req: Request): """Load a specific session by ID and set it as the active session.""" req.session["session_id"] = session_id return { "messages": db_service.get_chat_history(session_id), "session_id": session_id, "success": True, } @router.delete("/session/{session_id}") async def delete_session_endpoint(session_id: str, req: Request): """Delete a session and reset the active session if it matches.""" db_service.delete_session(session_id) if req.session.get("session_id") == session_id: req.session["session_id"] = str(uuid.uuid4()) return {"message": "Session deleted", "success": True}