From 906710879893e95ef3451ad070281d8a7b104d03 Mon Sep 17 00:00:00 2001 From: Dilan Gilluly Date: Wed, 14 Jan 2026 17:17:15 -0500 Subject: [PATCH] (add): Remote API endpoints for ticket search --- api/main.py | 5 +++-- api/repos/search.py | 16 ++++++++++++++++ api/routers/search.py | 17 +++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 api/repos/search.py create mode 100644 api/routers/search.py diff --git a/api/main.py b/api/main.py index 2e75a09..d5f4f72 100644 --- a/api/main.py +++ b/api/main.py @@ -2,7 +2,6 @@ from fastapi import FastAPI from sys import argv -from exceptions import bad_key from repos.api_keys import ApiKeyRepo @@ -13,6 +12,7 @@ from routers.combined import combined_router from routers.reports import report_router from routers.backuprestore import backup_router from routers.counts import counts_router +from routers.search import search_router if argv[1] == "run": app = FastAPI(title="TAM3 API Server", docs_url=None, redoc_url=None) @@ -31,4 +31,5 @@ app.include_router(basket_router) app.include_router(combined_router) app.include_router(report_router) app.include_router(backup_router) -app.include_router(counts_router) \ No newline at end of file +app.include_router(counts_router) +app.include_router(search_router) diff --git a/api/repos/search.py b/api/repos/search.py new file mode 100644 index 0000000..09c468e --- /dev/null +++ b/api/repos/search.py @@ -0,0 +1,16 @@ +from .template import Repo +from .tickets import Ticket + + +class SearchRepo(Repo): + def SearchTickets( + self, first_name: str = "", last_name: str = "", phone_number: str = "" + ): + self.cur.execute( + 'SELECT * FROM tickets WHERE first_name LIKE %s AND last_name LIKE %s AND phone_number LIKE %s', + (f"%{first_name}%", f"%{last_name}%", f"%{phone_number}%"), + ) + records = self.cur.fetchall() + if not records: + return [] + return [Ticket(*r) for r in records] diff --git a/api/routers/search.py b/api/routers/search.py new file mode 100644 index 0000000..9b77cb8 --- /dev/null +++ b/api/routers/search.py @@ -0,0 +1,17 @@ +from exceptions import bad_key +from fastapi import APIRouter +from repos.api_keys import ApiKeyRepo +from repos.search import SearchRepo + +search_router = APIRouter(prefix="/api/search") + + +@search_router.get("/tickets/") +def search_tickets( + api_key: str, first_name: str = "", last_name: str = "", phone_number: str = "" +): + if not ApiKeyRepo().check_api(api_key): + raise bad_key + return SearchRepo().SearchTickets( + first_name=first_name, last_name=last_name, phone_number=phone_number + )