Implements FastAPI backend with ML model support for energy trading, including price prediction models and RL-based battery trading policy. Features dashboard, trading, backtest, and settings API routes with WebSocket support for real-time updates.
49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
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)}
|