Milestone - core reports working

This commit is contained in:
2025-09-27 16:46:30 -04:00
parent 2d2e57b50b
commit 7fb67ed543
20 changed files with 365 additions and 24 deletions

View File

@@ -7,6 +7,7 @@ from routers.prefixes import prefix_router
from routers.tickets import ticket_router
from routers.baskets import basket_router
from routers.combined import combined_router
from routers.reports import report_router
if argv[1] == "run":
app = FastAPI(title="TAM3 API Server", docs_url=None, redoc_url=None)
@@ -16,4 +17,5 @@ else:
app.include_router(prefix_router)
app.include_router(ticket_router)
app.include_router(basket_router)
app.include_router(combined_router)
app.include_router(combined_router)
app.include_router(report_router)

22
api/repos/reports.py Normal file
View File

@@ -0,0 +1,22 @@
from dataclasses import dataclass
from .template import Repo
@dataclass
class ReportItem:
prefix: str
winner_name: str
phone_number: str | None
preference: str
b_id: int
winning_ticket: int
description: str
class ReportRepo(Repo):
def get_byname(self, prefix: str) -> list[ReportItem]:
self.cur.execute("SELECT * FROM report WHERE prefix = %s", (prefix,))
results = self.cur.fetchall()
return [ReportItem(*r) for r in results]
def get_bybasket(self, prefix: str) -> list[ReportItem]:
self.cur.execute("SELECT * FROM report WHERE prefix = %s ORDER BY b_id ASC", (prefix,))
results = self.cur.fetchall()
return [ReportItem(*r) for r in results]

18
api/routers/reports.py Normal file
View File

@@ -0,0 +1,18 @@
from fastapi import APIRouter
from repos.reports import ReportItem, ReportRepo
from repos.api_keys import ApiKeyRepo
from exceptions import bad_key
report_router = APIRouter(prefix="/api/reports")
@report_router.get("/byname/{prefix}/")
def get_report_byname(api_key: str, prefix: str):
if not ApiKeyRepo().check_api(api_key):
raise bad_key
return ReportRepo().get_byname(prefix)
@report_router.get("/bybasket/{prefix}/")
def get_report_bybasket(api_key: str, prefix: str):
if not ApiKeyRepo().check_api(api_key):
raise bad_key
return ReportRepo().get_bybasket(prefix)