from fastapi import APIRouter, Query from app.api.schemas import ( AShareIndexFlowResponse, AShareSectorFlowResponse, HealthResponse, HistoryResponse, MetaResponse, OverviewResponse, PushRecord, PushRecordsResponse, RulesResponse, SourceDiagnosticsResponse, ) from app.services.ashare_flow_service import ashare_flow_service from app.services.alert_service import alert_service from app.services.monitoring_service import monitoring_service router = APIRouter() @router.get("/health", response_model=HealthResponse) def health() -> HealthResponse: return HealthResponse(status="ok") @router.get("/meta", response_model=MetaResponse) def meta() -> MetaResponse: return monitoring_service.get_meta() @router.get("/overview", response_model=OverviewResponse) def overview() -> OverviewResponse: return monitoring_service.get_overview() @router.get("/history", response_model=HistoryResponse) def history() -> HistoryResponse: return monitoring_service.get_history() @router.get("/push-records", response_model=PushRecordsResponse) def push_records() -> PushRecordsResponse: return monitoring_service.get_push_records() @router.post("/push-records/test", response_model=PushRecord) def send_test_push_record() -> PushRecord: return PushRecord(**alert_service.send_test_alert()) @router.get("/rules", response_model=RulesResponse) def rules() -> RulesResponse: return monitoring_service.get_rules() @router.get("/source-diagnostics", response_model=SourceDiagnosticsResponse) def source_diagnostics() -> SourceDiagnosticsResponse: return monitoring_service.get_source_diagnostics() @router.get("/ashare/index-flows/realtime", response_model=AShareIndexFlowResponse) def ashare_index_realtime() -> AShareIndexFlowResponse: return AShareIndexFlowResponse(**ashare_flow_service.get_index_realtime()) @router.get("/ashare/index-flows/daily", response_model=AShareIndexFlowResponse) def ashare_index_daily(trade_date: str | None = Query(default=None)) -> AShareIndexFlowResponse: return AShareIndexFlowResponse(**ashare_flow_service.get_index_daily(trade_date)) @router.get("/ashare/sector-flows/realtime", response_model=AShareSectorFlowResponse) def ashare_sector_realtime() -> AShareSectorFlowResponse: return AShareSectorFlowResponse(**ashare_flow_service.get_sector_realtime()) @router.get("/ashare/sector-flows/daily", response_model=AShareSectorFlowResponse) def ashare_sector_daily(trade_date: str | None = Query(default=None)) -> AShareSectorFlowResponse: return AShareSectorFlowResponse(**ashare_flow_service.get_sector_daily(trade_date))