"""采集路由。""" from __future__ import annotations import logging from fastapi import APIRouter, Depends, HTTPException from src.api.deps import require_admin_key from src.api.schemas import IngestBzzoiroRequest, IngestResponse, IngestUnderstatRequest, IngestInjuriesRequest, IngestSimpleResponse from src.data.sources import get_source from src.data.injuries import ingest_injuries from src.db.unit_of_work import get_uow logger = logging.getLogger(__name__) router = APIRouter(prefix="/api/v1", tags=["ingest"]) @router.post("/ingest/bzzoiro", response_model=IngestResponse, dependencies=[Depends(require_admin_key)]) async def ingest_bzzoiro_route(req: IngestBzzoiroRequest): """触发 bzzoiro 采集。""" source = get_source("bzzoiro") try: async with get_uow() as session: result = await source.ingest( session, leagues=req.leagues, date_from=req.date_from, date_to=req.date_to, status=req.status, ) return IngestResponse(**result) except Exception as e: logger.exception("bzzoiro ingest failed") raise HTTPException(500, "数据采集失败,请查看服务器日志") @router.post("/ingest/understat", response_model=IngestSimpleResponse, dependencies=[Depends(require_admin_key)]) async def ingest_understat_route(req: IngestUnderstatRequest): """触发 understat xG 回填。""" source = get_source("understat") try: async with get_uow() as session: result = await source.ingest(session, league=req.league, season=req.season) return IngestSimpleResponse(**result) except Exception as e: logger.exception("understat ingest failed") raise HTTPException(500, "xG 回填失败,请查看服务器日志") @router.post("/ingest/injuries", response_model=IngestSimpleResponse, dependencies=[Depends(require_admin_key)]) async def ingest_injuries_route(req: IngestInjuriesRequest): """触发伤停采集。""" try: async with get_uow() as session: result = await ingest_injuries(session, date=req.date) return IngestSimpleResponse(**result) except Exception as e: logger.exception("injuries ingest failed") raise HTTPException(500, "伤停采集失败,请查看服务器日志")