import uuid from datetime import datetime from fastapi import APIRouter, Depends, HTTPException, Query, status from fastapi.responses import StreamingResponse from sqlalchemy.ext.asyncio import AsyncSession from app.api.deps import get_current_user from app.database import get_db from app.models.user import User from app.services.citation import export_citations_csv router = APIRouter() @router.get("/export/csv") async def export_report( query_id: uuid.UUID = Query(...), format: str = Query("csv"), db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ): if format != "csv": raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Only CSV format is supported", ) try: csv_content = await export_citations_csv(db, current_user.id, query_id) except ValueError as e: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=str(e), ) date_str = datetime.now().strftime("%Y%m%d") filename = f"geo-report-{date_str}.csv" return StreamingResponse( iter([csv_content]), media_type="text/csv", headers={ "Content-Disposition": f'attachment; filename="{filename}"', }, )