ido / api /session_routes.py
Parthnuwal7
Adding backend to HF spaces
27d04ef
"""
Session management API routes
Endpoints for storing and retrieving session data
"""
from fastapi import APIRouter, HTTPException
from models.schemas import SessionStoreRequest, SessionResponse, SessionData
from services.session_service import (
create_session,
get_session,
delete_session,
list_sessions,
cleanup_expired_sessions
)
router = APIRouter()
@router.post("/store", response_model=SessionResponse)
async def store_session(request: SessionStoreRequest):
"""
Store extracted files in a session with a unique token.
Returns session token for future retrieval.
"""
try:
# Convert Pydantic models to dicts for storage
files_dict = [f.model_dump() for f in request.files]
result = create_session(files_dict, request.timezone)
return SessionResponse(**result)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error storing session: {str(e)}")
@router.get("/{token}", response_model=SessionData)
async def get_session_data(token: str):
"""
Retrieve session data by token.
"""
session = get_session(token)
if session is None:
raise HTTPException(status_code=404, detail="Session not found")
return SessionData(**session)
@router.delete("/{token}")
async def delete_session_data(token: str):
"""
Delete a session by token.
"""
deleted = delete_session(token)
if not deleted:
raise HTTPException(status_code=404, detail="Session not found")
return {"message": "Session deleted successfully", "token": token}
@router.get("/")
async def list_all_sessions():
"""
List all sessions (for debugging).
"""
sessions = list_sessions()
return {"sessions": sessions, "count": len(sessions)}
@router.post("/cleanup")
async def cleanup_sessions(max_age_hours: int = 24):
"""
Clean up expired sessions.
Args:
max_age_hours: Maximum age in hours (default: 24)
"""
deleted_count = cleanup_expired_sessions(max_age_hours)
return {"deleted_count": deleted_count, "max_age_hours": max_age_hours}