diff options
author | Navan Chauhan <navanchauhan@gmail.com> | 2025-04-20 19:06:17 -0600 |
---|---|---|
committer | Navan Chauhan <navanchauhan@gmail.com> | 2025-04-20 19:06:17 -0600 |
commit | c5280c7f7227d81d698982dd89e103393eec67a6 (patch) | |
tree | d3b5699f7d774de7556b5715705b286a3a31f226 | |
parent | 405611b1d5fb5d1f011957b3ec6521976311af3b (diff) |
initial api scaffold
-rw-r--r-- | server/Makefile | 11 | ||||
-rw-r--r-- | server/api/bids.py | 16 | ||||
-rw-r--r-- | server/api/market.py | 12 | ||||
-rw-r--r-- | server/api/pnl.py | 8 | ||||
-rw-r--r-- | server/db.py | 0 | ||||
-rw-r--r-- | server/main.py | 8 | ||||
-rw-r--r-- | server/models/bid.py | 8 | ||||
-rw-r--r-- | server/models/market.py | 5 | ||||
-rw-r--r-- | server/requirements.txt | 5 | ||||
-rw-r--r-- | server/settings.json | 11 |
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" + } + } + } + } +} |