from typing import Optional from fastapi import APIRouter, Depends, Header from sqlalchemy.orm import Session from app.core.response import success_response from app.db import get_db_session from app.services.auth_service import AuthService from app.services.quality_eval_service import QualityEvalService router = APIRouter(prefix="/quality-evals", tags=["quality-evals"]) ROUTE_PERMISSION_SCOPE = "quality_evals" ROUTE_PERMISSION_ACTIONS = { "list": "quality_evals:list", "detail": "quality_evals:detail", } def get_quality_eval_service(db: Session = Depends(get_db_session)) -> QualityEvalService: return QualityEvalService(db) def require_current_user( authorization: Optional[str] = Header(default=None), db: Session = Depends(get_db_session), ): return AuthService(db).require_current_user(authorization) @router.get("/runs") def list_quality_eval_runs( page: int = 1, page_size: int = 20, source_kind: Optional[str] = None, eval_domain: Optional[str] = None, subject_type: Optional[str] = None, status_filter: Optional[str] = None, quality_eval_service: QualityEvalService = Depends(get_quality_eval_service), current_user: dict = Depends(require_current_user), ): return success_response( quality_eval_service.list_quality_eval_runs( current_user, page, page_size, source_kind=source_kind, eval_domain=eval_domain, subject_type=subject_type, status_filter=status_filter, ) ) @router.get("/runs/{run_id}") def get_quality_eval_run_detail( run_id: str, quality_eval_service: QualityEvalService = Depends(get_quality_eval_service), current_user: dict = Depends(require_current_user), ): return success_response(quality_eval_service.get_quality_eval_run_detail(current_user, run_id))