39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
"""Downloadable risk report endpoints."""
|
|
|
|
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from fastapi.responses import Response
|
|
|
|
from app.api.dependencies import require_permission
|
|
from app.models.entities import UserAccount
|
|
from app.schemas.risk_prediction import RiskAssessmentResult
|
|
from app.services.reports import build_risk_report_docx, build_risk_report_pdf
|
|
|
|
router = APIRouter(prefix="/reports", tags=["reports"])
|
|
|
|
|
|
@router.post("/pdf")
|
|
async def download_report_pdf(
|
|
payload: RiskAssessmentResult,
|
|
_current_user: Annotated[UserAccount, Depends(require_permission("risk.assess", operate=True))],
|
|
) -> Response:
|
|
pdf = build_risk_report_pdf(payload)
|
|
return Response(
|
|
content=pdf,
|
|
media_type="application/pdf",
|
|
headers={"Content-Disposition": 'attachment; filename="dieya-risk-report.pdf"'},
|
|
)
|
|
|
|
|
|
@router.post("/word")
|
|
async def download_report_word(
|
|
payload: RiskAssessmentResult,
|
|
_current_user: Annotated[UserAccount, Depends(require_permission("risk.assess", operate=True))],
|
|
) -> Response:
|
|
return Response(
|
|
content=build_risk_report_docx(payload),
|
|
media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
headers={"Content-Disposition": 'attachment; filename="dieya-risk-report.docx"'},
|
|
)
|