import json import uuid from dataclasses import asdict, dataclass from pathlib import Path from app.services.exporter import ExportResult, write_export @dataclass(slots=True) class ResultMetadata: result_id: str file_path: str download_name: str mimetype: str def persist_result( output_dir: Path, records: list[dict[str, str]], union_keys: list[str], mode: str, output_format: str, preview_record_limit: int, ) -> tuple[ResultMetadata, ExportResult]: """Persist generated output and sidecar metadata in a temporary directory.""" result_id = uuid.uuid4().hex extension = "txt" if output_format == "text" else "csv" mimetype = "text/plain; charset=utf-8" if extension == "txt" else "text/csv; charset=utf-8" file_path = output_dir / f"{result_id}.{extension}" metadata_path = output_dir / f"{result_id}.json" export_result = write_export( file_path=file_path, records=records, union_keys=union_keys, mode=mode, output_format=output_format, preview_record_limit=preview_record_limit, ) metadata = ResultMetadata( result_id=result_id, file_path=str(file_path), download_name=f"waf-report.{extension}", mimetype=mimetype, ) metadata_path.write_text(json.dumps(asdict(metadata)), encoding="utf-8") return metadata, export_result def load_result_metadata(output_dir: Path, result_id: str) -> dict[str, str] | None: """Load sidecar metadata for a generated file.""" metadata_path = output_dir / f"{result_id}.json" if not metadata_path.exists(): return None return json.loads(metadata_path.read_text(encoding="utf-8"))