aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNavan Chauhan <navanchauhan@gmail.com>2025-04-20 19:06:17 -0600
committerNavan Chauhan <navanchauhan@gmail.com>2025-04-20 19:06:17 -0600
commitc5280c7f7227d81d698982dd89e103393eec67a6 (patch)
treed3b5699f7d774de7556b5715705b286a3a31f226
parent405611b1d5fb5d1f011957b3ec6521976311af3b (diff)
initial api scaffold
-rw-r--r--server/Makefile11
-rw-r--r--server/api/bids.py16
-rw-r--r--server/api/market.py12
-rw-r--r--server/api/pnl.py8
-rw-r--r--server/db.py0
-rw-r--r--server/main.py8
-rw-r--r--server/models/bid.py8
-rw-r--r--server/models/market.py5
-rw-r--r--server/requirements.txt5
-rw-r--r--server/settings.json11
10 files changed, 84 insertions, 0 deletions
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
--- /dev/null
+++ b/server/db.py
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"
+ }
+ }
+ }
+ }
+}