API Server Basket Logic
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
from ..core.models import RepoTemplate
|
from ..core.models import RepoTemplate
|
||||||
from .models import Prefix, Ticket, Count
|
from .models import Prefix, Ticket, Count, Basket
|
||||||
|
|
||||||
|
|
||||||
class PrefixRepo(RepoTemplate):
|
class PrefixRepo(RepoTemplate):
|
||||||
@@ -81,3 +81,42 @@ class CountsRepo(RepoTemplate):
|
|||||||
self.cur.execute("SELECT * FROM counts")
|
self.cur.execute("SELECT * FROM counts")
|
||||||
results = self.cur.fetchall()
|
results = self.cur.fetchall()
|
||||||
return [Count(*r) for r in results]
|
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 fastapi import APIRouter, Header, status, HTTPException
|
||||||
|
|
||||||
from .repos import PrefixRepo, TicketRepo, CountsRepo
|
from .repos import PrefixRepo, TicketRepo, CountsRepo, BasketRepo
|
||||||
from .models import Prefix, Ticket
|
from .models import Prefix, Ticket, Basket
|
||||||
from ..core.auth import AuthRepo
|
from ..core.auth import AuthRepo
|
||||||
|
|
||||||
prefix_router = APIRouter(prefix="/api/prefix")
|
prefix_router = APIRouter(prefix="/api/prefix")
|
||||||
@@ -68,3 +68,37 @@ counts_router = APIRouter(prefix="/api/counts")
|
|||||||
def get_counts(tam_auth_key: str = Header("")):
|
def get_counts(tam_auth_key: str = Header("")):
|
||||||
AuthRepo().verify_key(tam_auth_key)
|
AuthRepo().verify_key(tam_auth_key)
|
||||||
return CountsRepo().get_counts()
|
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.prefix_router)
|
||||||
app.include_router(routers.ticket_router)
|
app.include_router(routers.ticket_router)
|
||||||
app.include_router(routers.counts_router)
|
app.include_router(routers.counts_router)
|
||||||
|
app.include_router(routers.basket_router)
|
||||||
|
|||||||
Reference in New Issue
Block a user