Files
Brancheneinstufung2/list-generator/backend/app/routers/generate.py

51 lines
2.1 KiB
Python

from fastapi import APIRouter, File, UploadFile, Form, HTTPException
from fastapi.responses import FileResponse
from typing import Optional
import os
import shutil
import tempfile
import traceback
from ..services.pdf_generator import generate_school_pdf
router = APIRouter()
@router.post("/generate-list")
async def generate_list(
institution: str = Form(...),
date_info: str = Form(...),
list_type: str = Form("k"),
students_file: UploadFile = File(...),
families_file: Optional[UploadFile] = File(None)
):
try:
with tempfile.TemporaryDirectory() as temp_dir:
students_path = os.path.join(temp_dir, "students.csv")
with open(students_path, "wb") as buffer:
shutil.copyfileobj(students_file.file, buffer)
families_path = None
if families_file:
families_path = os.path.join(temp_dir, "families.csv")
with open(families_path, "wb") as buffer:
shutil.copyfileobj(families_file.file, buffer)
print(f"Generating PDF for: {institution}, Type: {list_type}")
pdf_path = generate_school_pdf(
institution=institution,
date_info=date_info,
list_type=list_type,
students_csv_path=students_path,
families_csv_path=families_path,
output_dir=temp_dir
)
if not pdf_path or not os.path.exists(pdf_path):
raise HTTPException(status_code=500, detail="PDF generation failed - file not created.")
with open(pdf_path, "rb") as f:
pdf_bytes = f.read()
final_output_path = os.path.join("/tmp", os.path.basename(pdf_path))
with open(final_output_path, "wb") as f:
f.write(pdf_bytes)
return FileResponse(path=final_output_path, filename=os.path.basename(pdf_path), media_type="application/pdf")
except Exception as e:
print("ERROR IN GENERATE LIST:")
traceback.print_exc()
raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}")