43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
from dataclasses import dataclass
|
|
from .template import Repo
|
|
|
|
@dataclass
|
|
class Combined:
|
|
prefix: str
|
|
b_id: int
|
|
winning_ticket: int = 0
|
|
winner: str = ", "
|
|
changed: bool = False
|
|
|
|
class CombinedRepo(Repo):
|
|
def get_prefix_one(self, prefix: str, b_id: int) -> Combined:
|
|
self.cur.execute("SELECT * FROM combined WHERE prefix = %s AND b_id = %s", (prefix, b_id))
|
|
result = self.cur.fetchone()
|
|
if not result:
|
|
return Combined(prefix, b_id)
|
|
return Combined(*result)
|
|
def get_prefix_range(self, prefix: str, b_from: int, b_to: int) -> list[Combined]:
|
|
r_dict = {i: Combined(prefix, i) for i in range(b_from, b_to+1)}
|
|
self.cur.execute("SELECT * FROM combined WHERE prefix = %s AND b_id BETWEEN %s AND %s", (prefix, b_from, b_to))
|
|
results = self.cur.fetchall()
|
|
for b in results:
|
|
r_dict[b[1]] = Combined(*b)
|
|
return list(r_dict.values())
|
|
def get_prefix_all(self, prefix:str) -> list[Combined]:
|
|
self.cur.execute("SELECT * FROM combined WHERE prefix = %s", (prefix,))
|
|
results = self.cur.fetchall()
|
|
if not results:
|
|
return []
|
|
return [Combined(*r) for r in results]
|
|
def get_all(self) -> list[Combined]:
|
|
self.cur.execute("SELECT * FROM combined")
|
|
results = self.cur.fetchall()
|
|
if not results:
|
|
return []
|
|
return [Combined(*r) for r in results]
|
|
def post_list(self, c_entries: list[Combined]):
|
|
for combined in c_entries:
|
|
self.cur.execute("INSERT INTO baskets (prefix, b_id, winning_ticket) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE winning_ticket=%s",
|
|
(combined.prefix, combined.b_id, combined.winning_ticket, combined.winning_ticket))
|
|
self.conn.commit()
|
|
return {"detail": "Winners posted successfully"} |