Initial GeoIntel V1 foundation
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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
|
||||
Reference in New Issue
Block a user