| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- from __future__ import annotations
- from sqlalchemy import select
- from sqlalchemy.orm import Session
- from app.db.models.evaluation import (
- EvaluationIndicator,
- EvaluationRun,
- EvaluationScore,
- )
- from app.db.repositories.base import create_model
- def list_indicators(
- db: Session,
- *,
- mine_id: str | None = None,
- ) -> list[EvaluationIndicator]:
- statement = select(EvaluationIndicator).where(EvaluationIndicator.enabled.is_(True))
- if mine_id:
- statement = statement.where(
- (EvaluationIndicator.mine_id == mine_id)
- | (EvaluationIndicator.mine_id.is_(None))
- )
- return list(
- db.scalars(
- statement.order_by(
- EvaluationIndicator.dimension,
- EvaluationIndicator.sort_order,
- EvaluationIndicator.code,
- )
- ).all()
- )
- def list_runs(
- db: Session,
- mine_id: str,
- *,
- limit: int = 50,
- ) -> list[EvaluationRun]:
- return list(
- db.scalars(
- select(EvaluationRun)
- .where(EvaluationRun.mine_id == mine_id)
- .order_by(EvaluationRun.created_at.desc())
- .limit(limit)
- ).all()
- )
- def get_run(db: Session, run_id: str) -> EvaluationRun | None:
- return db.get(EvaluationRun, run_id)
- def list_scores(db: Session, run_id: str) -> list[EvaluationScore]:
- return list(
- db.scalars(
- select(EvaluationScore)
- .where(EvaluationScore.run_id == run_id)
- .order_by(EvaluationScore.weighted_score.desc())
- ).all()
- )
- def create_run(db: Session, data: dict) -> EvaluationRun:
- return create_model(db, EvaluationRun, data)
- def update_run(db: Session, run: EvaluationRun, data: dict) -> EvaluationRun:
- for key, value in data.items():
- setattr(run, key, value)
- db.add(run)
- db.commit()
- db.refresh(run)
- return run
- def create_score(db: Session, data: dict) -> EvaluationScore:
- return create_model(db, EvaluationScore, data)
|