Files
geointel/backend/app/services/quality_check_service.py
T
Codex 6ea3586a3e
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled
Initial GeoIntel V1 foundation
2026-06-16 23:36:32 +02:00

48 lines
1.5 KiB
Python

from __future__ import annotations
from uuid import UUID
from sqlalchemy.orm import Session
from app.models import Metric, QualityCheck
from app.schemas.qa import MetricRead, QualityCheckRead
class QualityCheckService:
@staticmethod
def list_quality_checks(
db: Session,
*,
project_id: UUID,
limit: int = 50,
offset: int = 0,
) -> tuple[list[QualityCheckRead], int]:
query = (
db.query(QualityCheck)
.filter(QualityCheck.project_id == project_id)
.order_by(QualityCheck.created_at.desc())
)
total = query.count()
rows = query.offset(offset).limit(limit).all()
if not rows:
return [], total
quality_check_ids = [row.id for row in rows]
metrics_by_quality_check: dict[UUID, list[MetricRead]] = {row.id: [] for row in rows}
metrics = (
db.query(Metric)
.filter(Metric.quality_check_id.in_(quality_check_ids))
.order_by(Metric.created_at.asc())
.all()
)
for metric in metrics:
if metric.quality_check_id in metrics_by_quality_check:
metrics_by_quality_check[metric.quality_check_id].append(MetricRead.model_validate(metric))
return [
QualityCheckRead.model_validate(row).model_copy(
update={"metrics": metrics_by_quality_check.get(row.id, [])}
)
for row in rows
], total