API Server Basket Logic
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from ..core.models import RepoTemplate
|
||||
from .models import Prefix, Ticket, Count
|
||||
from .models import Prefix, Ticket, Count, Basket
|
||||
|
||||
|
||||
class PrefixRepo(RepoTemplate):
|
||||
@@ -81,3 +81,42 @@ class CountsRepo(RepoTemplate):
|
||||
self.cur.execute("SELECT * FROM counts")
|
||||
results = self.cur.fetchall()
|
||||
return [Count(*r) for r in results]
|
||||
|
||||
class BasketRepo(RepoTemplate):
|
||||
"""Repo that controls the baskets system."""
|
||||
|
||||
def get_all_baskets(self):
|
||||
"""Gets all baskets from db."""
|
||||
self.cur.execute("SELECT * FROM baskets ORDER BY prefix, basket_id")
|
||||
results = self.cur.fetchall()
|
||||
return [Basket(*r) for r in results]
|
||||
|
||||
def get_prefix_baskets(self, prefix: str):
|
||||
"""Gets all baskets of a particular prefix."""
|
||||
self.cur.execute("SELECT * FROM baskets WHERE prefix = ? ORDER BY basket_id", (prefix,))
|
||||
results = self.cur.fetchall()
|
||||
return [Basket(*r) for r in results]
|
||||
|
||||
def get_one_baskets(self, prefix: str, b_id: int):
|
||||
"""Gets one basket."""
|
||||
self.cur.execute("SELECT * FROM baskets WHERE prefix = ? AND basket_id = ?", (prefix, b_id))
|
||||
result = self.cur.fetchone()
|
||||
if result:
|
||||
return Basket(*result)
|
||||
else:
|
||||
return Basket(prefix, b_id)
|
||||
|
||||
def get_range_baskets(self, prefix: str, r_start: int, r_end: int):
|
||||
"""Gets a range of baskets."""
|
||||
self.cur.execute("SELECT * FROM baskets WHERE prefix = ? AND basket_id BETWEEN ? AND ? ORDER BY basket_id", (prefix, r_start, r_end))
|
||||
results = self.cur.fetchall()
|
||||
return [Basket(*r) for r in results]
|
||||
|
||||
def post_baskets(self, bs: list[Basket]):
|
||||
"""Posts baskets to database."""
|
||||
for b in bs:
|
||||
self.cur.execute("""INSERT INTO baskets VALUES (?, ?, ?, ?)
|
||||
ON CONFLICT (prefix, basket_id) DO UPDATE
|
||||
SET description = EXCLUDED.description""", (b.prefix, b.basket_id, b.description, b.winning_ticket))
|
||||
self.conn.commit()
|
||||
return {"detail": "Baskets posted successfully."}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from fastapi import APIRouter, Header, status, HTTPException
|
||||
|
||||
from .repos import PrefixRepo, TicketRepo, CountsRepo
|
||||
from .models import Prefix, Ticket
|
||||
from .repos import PrefixRepo, TicketRepo, CountsRepo, BasketRepo
|
||||
from .models import Prefix, Ticket, Basket
|
||||
from ..core.auth import AuthRepo
|
||||
|
||||
prefix_router = APIRouter(prefix="/api/prefix")
|
||||
@@ -68,3 +68,37 @@ counts_router = APIRouter(prefix="/api/counts")
|
||||
def get_counts(tam_auth_key: str = Header("")):
|
||||
AuthRepo().verify_key(tam_auth_key)
|
||||
return CountsRepo().get_counts()
|
||||
|
||||
basket_router = APIRouter(prefix="/api/baskets")
|
||||
|
||||
@basket_router.get("")
|
||||
def get_all_baskets(tam_auth_key: str = Header("")):
|
||||
AuthRepo().verify_key(tam_auth_key)
|
||||
return BasketRepo().get_all_baskets()
|
||||
|
||||
@basket_router.get("/{prefix}")
|
||||
def get_prefix_baskets(prefix: str, tam_auth_key: str = Header("")):
|
||||
AuthRepo().verify_key(tam_auth_key)
|
||||
return BasketRepo().get_prefix_baskets(prefix)
|
||||
|
||||
@basket_router.get("/{prefix}/{s_id}")
|
||||
def get_basket_scope(prefix: str, s_id: str, tam_auth_key: str = Header("")) -> Basket | list[Basket]:
|
||||
AuthRepo().verify_key(tam_auth_key)
|
||||
if "-" in s_id:
|
||||
l_id = s_id.split("-", maxsplit=2)
|
||||
try:
|
||||
r_start, r_end = int(l_id[0]), int(l_id[1])
|
||||
except ValueError:
|
||||
raise inv_numbers_ex
|
||||
return BasketRepo().get_range_baskets(prefix, r_start, r_end)
|
||||
else:
|
||||
try:
|
||||
i_id = int(s_id)
|
||||
except ValueError:
|
||||
raise inv_numbers_ex
|
||||
return BasketRepo().get_one_baskets(prefix, i_id)
|
||||
|
||||
@basket_router.post("")
|
||||
def post_baskets(bs: list[Basket], tam_auth_key: str = Header("")):
|
||||
AuthRepo().verify_key(tam_auth_key)
|
||||
return BasketRepo().post_baskets(bs)
|
||||
|
||||
@@ -8,3 +8,4 @@ def append_routers(app: FastAPI):
|
||||
app.include_router(routers.prefix_router)
|
||||
app.include_router(routers.ticket_router)
|
||||
app.include_router(routers.counts_router)
|
||||
app.include_router(routers.basket_router)
|
||||
|
||||
Reference in New Issue
Block a user