(add): Tickets Logic

This commit is contained in:
2026-06-23 18:26:31 -04:00
parent 80c747226f
commit e5b6fbd7c5
20 changed files with 827 additions and 104 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
data
/data
*/__pycache__
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 Ticket:
prefix: str
t_id: int
first_name: str = ""
last_name: str = ""
phone_number: str = ""
pref: str = ""
class TicketRepo(RepoTemplate):
def get_all_tickets(self):
self.cur.execute("SELECT * FROM tickets ORDER BY prefix, t_id")
results = self.cur.fetchall()
return [Ticket(*r) for r in results]
def get_prefix_tickets(self, prefix: str):
self.cur.execute("SELECT * FROM tickets WHERE prefix = ? ORDER BY prefix, t_id", (prefix,))
results = self.cur.fetchall()
return [Ticket(*r) for r in results]
def get_single_ticket(self, prefix: str, id: int):
self.cur.execute("SELECT * FROM tickets WHERE prefix = ? AND t_id = ? ORDER BY prefix, t_id", (prefix, id))
results = self.cur.fetchall()
return [Ticket(*r) for r in results]
def get_range_tickets(self, prefix: str, id_from: int, id_to: int):
self.cur.execute("SELECT * FROM tickets WHERE prefix = ? AND t_id BETWEEN ? AND ? ORDER BY prefix, t_id", (prefix, id_from, id_to))
results = self.cur.fetchall()
return [Ticket(*r) for r in results]
def post_tickets(self, ts: list[Ticket]):
for t in ts:
self.cur.execute("""INSERT INTO tickets VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT (prefix, t_id) DO UPDATE SET
first_name = EXCLUDED.first_name, last_name = EXCLUDED.last_name, phone_number = EXCLUDED.phone_number,
pref = EXCLUDED.pref""", (t.prefix, t.t_id, t.first_name, t.last_name, t.phone_number, t.pref))
self.conn.commit()
return ts
tickets_router = APIRouter(prefix="/api/tickets")
@tickets_router.get("")
def get_all_tickets(tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return TicketRepo().get_all_tickets()
@tickets_router.get("/{prefix}")
def get_prefix_tickets(prefix: str, tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return TicketRepo().get_prefix_tickets(prefix)
@tickets_router.get("/{prefix}/{t_id}")
def get_single_ticket(prefix: str, t_id: int, tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return TicketRepo().get_single_ticket(prefix, t_id)
@tickets_router.get("/{prefix}/{id_from}/{id_to}")
def get_range_tickets(prefix: str, id_from: int, id_to: int, tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return TicketRepo().get_range_tickets(prefix, id_from, id_to)
@tickets_router.post("")
def post_tickets(ts: list[Ticket], tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return TicketRepo().post_tickets(ts)
+2
View File
@@ -17,6 +17,8 @@ def init_db():
conn, cur = session()
cur.execute("CREATE TABLE IF NOT EXISTS auth_keys (auth_key TEXT PRIMARY KEY, description TEXT)")
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))""")
conn.commit()
conn.close()
+2
View File
@@ -1,7 +1,9 @@
from fastapi import FastAPI
from system.auth import auth_router
from system.prefixes import prefix_router
from data.tickets import tickets_router
def imp_routers(app: FastAPI):
app.include_router(auth_router)
app.include_router(prefix_router)
app.include_router(tickets_router)