61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
# routes/cleanup_routes.py
|
|
"""Routes for cleanup operations."""
|
|
import logging
|
|
from fastapi import APIRouter, HTTPException, Request
|
|
from src.cleanup_service import get_cleanup_preview, cleanup_sessions
|
|
from src.auth_helpers import get_current_user
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def setup_cleanup_routes(session_manager):
|
|
"""
|
|
Setup cleanup-related routes.
|
|
|
|
Args:
|
|
session_manager: SessionManager instance
|
|
|
|
Returns:
|
|
APIRouter instance with cleanup routes
|
|
"""
|
|
router = APIRouter(prefix="/api/cleanup")
|
|
|
|
@router.get("/preview")
|
|
async def cleanup_preview(request: Request):
|
|
"""
|
|
Preview what would be cleaned up without making any changes.
|
|
|
|
Returns:
|
|
JSON response with lists of sessions that would be archived/deleted and estimated space savings
|
|
"""
|
|
user = get_current_user(request)
|
|
try:
|
|
preview = await get_cleanup_preview(owner=user)
|
|
return preview
|
|
except Exception as e:
|
|
logger.error(f"Cleanup preview failed: {e}")
|
|
raise HTTPException(500, "Cleanup preview generation failed")
|
|
|
|
@router.post("")
|
|
async def cleanup_endpoint(request: Request):
|
|
"""
|
|
Perform cleanup operations:
|
|
1. Archive inactive sessions (not accessed for 7 days)
|
|
2. Delete old sessions (archived, not important, not accessed for 14+ days, with fewer than 10 messages)
|
|
|
|
Returns:
|
|
JSON response with counts of deleted and archived sessions, and space freed
|
|
"""
|
|
user = get_current_user(request)
|
|
try:
|
|
archived_count, deleted_count, space_freed_mb = await cleanup_sessions(session_manager, owner=user)
|
|
return {
|
|
"archived_count": archived_count,
|
|
"deleted_count": deleted_count,
|
|
"space_freed_mb": round(space_freed_mb, 2)
|
|
}
|
|
except Exception as e:
|
|
logger.error(f"Cleanup failed: {e}")
|
|
raise HTTPException(500, "Cleanup operation failed")
|
|
|
|
return router
|