(add): Baskets function

This commit is contained in:
2026-06-25 17:31:56 -04:00
parent e5b6fbd7c5
commit 9d6473d4bf
33 changed files with 987 additions and 463 deletions
Binary file not shown.
+65
View File
@@ -0,0 +1,65 @@
from dataclasses import dataclass
from db import RepoTemplate
from system.auth import AuthRepo
from fastapi import APIRouter, Header
@dataclass
class Basket:
prefix: str
b_id: int
description: str = ""
donors: str = ""
winning_ticket: int = 0
class BasketRepo(RepoTemplate):
def get_all_baskets(self):
self.cur.execute("SELECT * FROM baskets ORDER BY prefix, b_id")
results = self.cur.fetchall()
return [Basket(*r) for r in results]
def get_prefix_baskets(self, prefix: str):
self.cur.execute("SELECT * FROM baskets WHERE prefix = ? ORDER BY prefix, b_id", (prefix,))
results = self.cur.fetchall()
return [Basket(*r) for r in results]
def get_single_basket(self, prefix: str, b_id: int):
self.cur.execute("SELECT * FROM baskets WHERE prefix = ? AND b_id = ? ORDER BY prefix, b_id", (prefix, b_id))
results = self.cur.fetchall()
return [Basket(*r) for r in results]
def get_range_baskets(self, prefix: str, id_from: int, id_to: int):
self.cur.execute("""SELECT * FROM baskets WHERE prefix = ? AND b_id BETWEEN ? AND ?
ORDER BY prefix, b_id""", (prefix, id_from, id_to))
results = self.cur.fetchall()
return [Basket(*r) for r in results]
def post_baskets(self, bs: list[Basket]):
for b in bs:
self.cur.execute("""INSERT INTO baskets VALUES (?, ?, ?, ?, ?) ON CONFLICT (prefix, b_id) DO UPDATE SET
description = EXCLUDED.description, donors = EXCLUDED.donors""",
(b.prefix, b.b_id, b.description, b.donors, b.winning_ticket))
self.conn.commit()
return bs
basket_router = APIRouter(prefix="/api/baskets")
@basket_router.get("")
def get_all_baskets(tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return BasketRepo().get_all_baskets()
@basket_router.get("/{prefix}")
def get_prefix_baskets(prefix: str, tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return BasketRepo().get_prefix_baskets(prefix)
@basket_router.get("/{prefix}/{b_id}")
def get_single_basket(prefix: str, b_id: int, tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return BasketRepo().get_single_basket(prefix, b_id)
@basket_router.get("/{prefix}/{id_from}/{id_to}")
def get_range_baskets(prefix: str, id_from: int, id_to: int, tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return BasketRepo().get_range_baskets(prefix, id_from, id_to)
@basket_router.post("")
def post_baskets(bs: list[Basket], tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return BasketRepo().post_baskets(bs)
+2
View File
@@ -19,6 +19,8 @@ def init_db():
cur.execute("CREATE TABLE IF NOT EXISTS prefixes (prefix TEXT PRIMARY KEY, color TEXT, weight INTEGER)")
cur.execute("""CREATE TABLE IF NOT EXISTS tickets (prefix TEXT, t_id INTEGER, first_name TEXT, last_name TEXT,
phone_number TEXT, pref TEXT, PRIMARY KEY (prefix, t_id))""")
cur.execute("""CREATE TABLE IF NOT EXISTS baskets (prefix TEXT, b_id INTEGER, description TEXT, donors TEXT,
winning_ticket INTEGER, PRIMARY KEY (prefix, b_id))""")
conn.commit()
conn.close()
+2
View File
@@ -2,8 +2,10 @@ from fastapi import FastAPI
from system.auth import auth_router
from system.prefixes import prefix_router
from data.tickets import tickets_router
from data.baskets import basket_router
def imp_routers(app: FastAPI):
app.include_router(auth_router)
app.include_router(prefix_router)
app.include_router(tickets_router)
app.include_router(basket_router)