sushilideaclan01's picture
refactored the files
d4a4da7
"""Bulk export endpoint."""
import os
import logging
from fastapi import APIRouter, HTTPException, Depends, BackgroundTasks
from fastapi.responses import FileResponse
from api.schemas import BulkExportRequest
from services.database import db_service
from services.export_service import export_service
from services.auth_dependency import get_current_user
router = APIRouter(tags=["export"])
api_logger = logging.getLogger("api")
@router.post("/api/export/bulk")
async def export_bulk_ads(
request: BulkExportRequest,
background_tasks: BackgroundTasks,
username: str = Depends(get_current_user),
):
"""
Export multiple ad creatives as a ZIP package.
Creates /creatives/ folder and ad_copy_data.xlsx. Max 50 ads.
"""
if len(request.ad_ids) > 50:
raise HTTPException(status_code=400, detail="Maximum 50 ads can be exported at once")
ads = []
for ad_id in request.ad_ids:
ad = await db_service.get_ad_creative(ad_id, username=username)
if not ad:
raise HTTPException(status_code=404, detail=f"Ad '{ad_id}' not found or access denied")
ads.append(ad)
try:
api_logger.info("Creating export package for %d ads (user: %s)", len(ads), username)
zip_path = await export_service.create_export_package(ads)
background_tasks.add_task(export_service.cleanup_zip, zip_path)
return FileResponse(
zip_path,
media_type="application/zip",
filename=os.path.basename(zip_path),
)
except HTTPException:
raise
except Exception as e:
api_logger.error("Bulk export failed: %s", e)
raise HTTPException(status_code=500, detail=f"Export failed: {str(e)}")