summaryrefslogtreecommitdiff
path: root/services/api/src/trading_api/routers/orders.py
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 17:25:54 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 17:25:54 +0900
commite10d4a96e062818cb2395add1746c733a053c374 (patch)
treebbd222cd840d2c7fc58d3109362fb1b0c00aee26 /services/api/src/trading_api/routers/orders.py
parent21c6b777530b4a027aec9c12bf63092e5a7c006d (diff)
feat: add FastAPI REST API service
Diffstat (limited to 'services/api/src/trading_api/routers/orders.py')
-rw-r--r--services/api/src/trading_api/routers/orders.py54
1 files changed, 54 insertions, 0 deletions
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
+ ]