From e10d4a96e062818cb2395add1746c733a053c374 Mon Sep 17 00:00:00 2001 From: TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> Date: Wed, 1 Apr 2026 17:25:54 +0900 Subject: feat: add FastAPI REST API service --- services/api/src/trading_api/routers/orders.py | 54 ++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 services/api/src/trading_api/routers/orders.py (limited to 'services/api/src/trading_api/routers/orders.py') diff --git a/services/api/src/trading_api/routers/orders.py b/services/api/src/trading_api/routers/orders.py new file mode 100644 index 0000000..989694f --- /dev/null +++ b/services/api/src/trading_api/routers/orders.py @@ -0,0 +1,54 @@ +"""Order endpoints.""" +from fastapi import APIRouter, Request +from shared.sa_models import OrderRow, SignalRow +from sqlalchemy import select + +router = APIRouter() + + +@router.get("/") +async def get_orders(request: Request, limit: int = 50): + """Get recent orders.""" + db = request.app.state.db + async with db.get_session() as session: + stmt = select(OrderRow).order_by(OrderRow.created_at.desc()).limit(limit) + result = await session.execute(stmt) + rows = result.scalars().all() + return [ + { + "id": r.id, + "signal_id": r.signal_id, + "symbol": r.symbol, + "side": r.side, + "type": r.type, + "price": float(r.price), + "quantity": float(r.quantity), + "status": r.status, + "created_at": r.created_at.isoformat() if r.created_at else None, + "filled_at": r.filled_at.isoformat() if r.filled_at else None, + } + for r in rows + ] + + +@router.get("/signals") +async def get_signals(request: Request, limit: int = 50): + """Get recent signals.""" + db = request.app.state.db + async with db.get_session() as session: + stmt = select(SignalRow).order_by(SignalRow.created_at.desc()).limit(limit) + result = await session.execute(stmt) + rows = result.scalars().all() + return [ + { + "id": r.id, + "strategy": r.strategy, + "symbol": r.symbol, + "side": r.side, + "price": float(r.price), + "quantity": float(r.quantity), + "reason": r.reason, + "created_at": r.created_at.isoformat() if r.created_at else None, + } + for r in rows + ] -- cgit v1.2.3