45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from fastapi import APIRouter, Depends, Path, Query
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.api.deps import get_database
|
|
from app.db.repositories.repositories import TestRunRepository
|
|
from app.schemas.api import ErrorResponse, ReportResponse
|
|
from app.services.report_service import ReportService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get(
|
|
"/reports",
|
|
response_model=list[ReportResponse],
|
|
summary="列出测试汇总报告",
|
|
description="按运行创建时间倒序返回实时计算的报告;`limit` 默认 50,最大 200。",
|
|
)
|
|
def list_reports(
|
|
limit: int = Query(default=50, ge=1, le=200),
|
|
db: Session = Depends(get_database),
|
|
):
|
|
service = ReportService(db)
|
|
return [
|
|
ReportResponse(run_id=run.id, summary=service.build_summary(run.id))
|
|
for run in TestRunRepository(db).list(limit)
|
|
]
|
|
|
|
|
|
@router.get(
|
|
"/reports/{run_id}",
|
|
response_model=ReportResponse,
|
|
summary="查询测试汇总报告",
|
|
description="实时计算并返回某次测试运行的结构化汇总;运行不存在时返回 404。",
|
|
responses={404: {"model": ErrorResponse, "description": "指定的测试运行不存在。"}},
|
|
)
|
|
def get_report(
|
|
run_id: int = Path(description="要生成报告的测试运行 ID,必须为正整数。", gt=0),
|
|
db: Session = Depends(get_database),
|
|
):
|
|
return ReportResponse(
|
|
run_id=run_id,
|
|
summary=ReportService(db).build_summary(run_id),
|
|
)
|