from typing import List from fastapi import APIRouter, Depends, Query from app.models.schemas import DashboardSummary, ArbitrageOpportunity, PriceData, BatteryState from app.services import DataService router = APIRouter() data_service = DataService() @router.on_event("startup") async def startup(): await data_service.initialize() @router.get("/summary", response_model=DashboardSummary) async def get_summary(): summary = data_service.get_dashboard_summary() return DashboardSummary(**summary) @router.get("/prices") async def get_latest_prices(): return {"regions": data_service.get_latest_prices()} @router.get("/prices/history") async def get_price_history( region: str = Query(..., description="Region code (FR, BE, DE, NL, UK)"), start: str = Query(None, description="Start date (YYYY-MM-DD)"), end: str = Query(None, description="End date (YYYY-MM-DD)"), limit: int = Query(1000, description="Maximum number of records"), ): data = data_service.get_price_history(region, start, end, limit) return {"region": region, "data": data} @router.get("/battery") async def get_battery_states(): batteries = data_service.get_battery_states() return {"batteries": batteries} @router.get("/arbitrage") async def get_arbitrage_opportunities( min_spread: float = Query(None, description="Minimum spread in EUR/MWh") ): opportunities = data_service.get_arbitrage_opportunities(min_spread) return {"opportunities": opportunities, "count": len(opportunities)}