Files
geointel/backend/app/services/quality_service.py
T
Codex 12c370edd4
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled
Fix quality metric persistence ordering
2026-06-17 00:36:35 +02:00

61 lines
1.8 KiB
Python

from __future__ import annotations
from datetime import datetime, timezone
from uuid import UUID, uuid4
from app.models import Metric, QualityCheck
class QualityService:
@staticmethod
def persist_quality_check(
db,
project_id: UUID,
reference_dataset_id: UUID,
check_type: str,
status: str,
score: float | None,
parameters: dict | None,
findings: dict | None,
*,
job_id: UUID | None = None,
analysis_run_id: UUID | None = None,
candidate_dataset_id: UUID | None = None,
metrics: dict[str, float | int | None] | None = None,
commit: bool = True,
) -> QualityCheck:
quality_check = QualityCheck(
id=uuid4(),
project_id=project_id,
job_id=job_id,
analysis_run_id=analysis_run_id,
candidate_dataset_id=candidate_dataset_id,
reference_dataset_id=reference_dataset_id,
check_type=check_type,
status=status,
score=score,
parameters_json=parameters or {},
findings_json=findings or {},
completed_at=datetime.now(timezone.utc),
)
db.add(quality_check)
if hasattr(db, "flush"):
db.flush()
for key, value in (metrics or {}).items():
db.add(
Metric(
id=uuid4(),
quality_check_id=quality_check.id,
analysis_run_id=analysis_run_id,
metric_key=key,
metric_value=float(value) if value is not None else None,
metadata_json={},
)
)
if commit:
db.commit()
db.refresh(quality_check)
return quality_check