From c5280c7f7227d81d698982dd89e103393eec67a6 Mon Sep 17 00:00:00 2001 From: Navan Chauhan Date: Sun, 20 Apr 2025 19:06:17 -0600 Subject: initial api scaffold --- server/Makefile | 11 +++++++++++ server/api/bids.py | 16 ++++++++++++++++ server/api/market.py | 12 ++++++++++++ server/api/pnl.py | 8 ++++++++ server/db.py | 0 server/main.py | 8 ++++++++ server/models/bid.py | 8 ++++++++ server/models/market.py | 5 +++++ server/requirements.txt | 5 +++++ server/settings.json | 11 +++++++++++ 10 files changed, 84 insertions(+) create mode 100644 server/Makefile create mode 100644 server/api/bids.py create mode 100644 server/api/market.py create mode 100644 server/api/pnl.py create mode 100644 server/db.py create mode 100644 server/main.py create mode 100644 server/models/bid.py create mode 100644 server/models/market.py create mode 100644 server/requirements.txt create mode 100644 server/settings.json diff --git a/server/Makefile b/server/Makefile new file mode 100644 index 0000000..6709e13 --- /dev/null +++ b/server/Makefile @@ -0,0 +1,11 @@ +.PHONY: run setup + +env/bin/activate: + python3 -m venv env + env/bin/pip install --upgrade pip + env/bin/pip install -r requirements.txt + +setup: env/bin/activate + +run: setup + env/bin/uvicorn main:app --reload diff --git a/server/api/bids.py b/server/api/bids.py new file mode 100644 index 0000000..24e2fa0 --- /dev/null +++ b/server/api/bids.py @@ -0,0 +1,16 @@ +from fastapi import APIRouter +from models.bid import Bid +from typing import List + +router = APIRouter() + +fake_bid_store: List[Bid] = [] + +@router.get("/", response_model=List[Bid]) +def get_bids(): + return fake_bid_store + +@router.post("/", response_model=Bid) +def submit_bid(bid: Bid): + fake_bid_store.append(bid) + return bid diff --git a/server/api/market.py b/server/api/market.py new file mode 100644 index 0000000..5b95ca3 --- /dev/null +++ b/server/api/market.py @@ -0,0 +1,12 @@ +from fastapi import APIRouter +from models.market import MarketData + +router = APIRouter() + +@router.get("/day-ahead", response_model=list[MarketData]) +def get_day_ahead_data(): + return [] + +@router.get("/real-time", response_model=list[MarketData]) +def get_real_time_data(): + return [] diff --git a/server/api/pnl.py b/server/api/pnl.py new file mode 100644 index 0000000..7565f96 --- /dev/null +++ b/server/api/pnl.py @@ -0,0 +1,8 @@ +from fastapi import APIRouter + +router = APIRouter() + +@router.get("/pnl") +def get_pnl(): + # TODO: Real logic + return {"profit": 42.0} diff --git a/server/db.py b/server/db.py new file mode 100644 index 0000000..e69de29 diff --git a/server/main.py b/server/main.py new file mode 100644 index 0000000..df4cd55 --- /dev/null +++ b/server/main.py @@ -0,0 +1,8 @@ +from fastapi import FastAPI +from api import market, bids, pnl + +app = FastAPI(title="Virtual Energy Trading API") + +app.include_router(market.router, prefix="/market") +app.include_router(bids.router, prefix="/bids") +app.include_router(pnl.router, prefix="/trader") diff --git a/server/models/bid.py b/server/models/bid.py new file mode 100644 index 0000000..1b2eb0d --- /dev/null +++ b/server/models/bid.py @@ -0,0 +1,8 @@ +from pydantic import BaseModel + +class Bid(BaseModel): + id: int + timestamp: str + quantity: float + price: float + type: str # Could be a boolean value to represent whether the bid is a buy or sell order diff --git a/server/models/market.py b/server/models/market.py new file mode 100644 index 0000000..f402ab7 --- /dev/null +++ b/server/models/market.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + +class MarketData(BaseModel): + timestamp: str + price: float diff --git a/server/requirements.txt b/server/requirements.txt new file mode 100644 index 0000000..ba30231 --- /dev/null +++ b/server/requirements.txt @@ -0,0 +1,5 @@ +fastapi +uvicorn +httpx +pydantic +gridstatus diff --git a/server/settings.json b/server/settings.json new file mode 100644 index 0000000..cf90886 --- /dev/null +++ b/server/settings.json @@ -0,0 +1,11 @@ +{ + "lsp": { + "pyright": { + "settings": { + "python": { + "pythonPath": "./env/bin/python" + } + } + } + } +} -- cgit v1.2.3