Compare commits
No commits in common. "main" and "fix/sqlite-ticket-extra-serialization" have entirely different histories.
main
...
fix/sqlite
1 changed files with 41 additions and 29 deletions
70
crud.py
70
crud.py
|
|
@ -1,4 +1,3 @@
|
||||||
import json
|
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
|
@ -7,30 +6,6 @@ from lnbits.helpers import urlsafe_short_hash
|
||||||
|
|
||||||
from .models import CreateEvent, Event, Ticket, TicketExtra
|
from .models import CreateEvent, Event, Ticket, TicketExtra
|
||||||
|
|
||||||
|
|
||||||
def _parse_ticket_row(row) -> dict:
|
|
||||||
"""
|
|
||||||
Parse a database row into a dict suitable for Ticket model creation.
|
|
||||||
Handles:
|
|
||||||
- Empty string to None conversion for name/email
|
|
||||||
- JSON string to dict conversion for extra field
|
|
||||||
"""
|
|
||||||
ticket_data = dict(row)
|
|
||||||
|
|
||||||
# Convert empty strings back to None for the model
|
|
||||||
if ticket_data.get("name") == "":
|
|
||||||
ticket_data["name"] = None
|
|
||||||
if ticket_data.get("email") == "":
|
|
||||||
ticket_data["email"] = None
|
|
||||||
|
|
||||||
# Parse extra field from JSON string if needed
|
|
||||||
# (db.insert() serializes to JSON, but manual fetchone/fetchall returns string)
|
|
||||||
extra = ticket_data.get("extra")
|
|
||||||
if isinstance(extra, str):
|
|
||||||
ticket_data["extra"] = json.loads(extra)
|
|
||||||
|
|
||||||
return ticket_data
|
|
||||||
|
|
||||||
db = Database("ext_events")
|
db = Database("ext_events")
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -119,7 +94,14 @@ async def get_ticket(payment_hash: str) -> Optional[Ticket]:
|
||||||
if not row:
|
if not row:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return Ticket(**_parse_ticket_row(row))
|
# Convert empty strings back to None for the model
|
||||||
|
ticket_data = dict(row)
|
||||||
|
if ticket_data.get("name") == "":
|
||||||
|
ticket_data["name"] = None
|
||||||
|
if ticket_data.get("email") == "":
|
||||||
|
ticket_data["email"] = None
|
||||||
|
|
||||||
|
return Ticket(**ticket_data)
|
||||||
|
|
||||||
|
|
||||||
async def get_tickets(wallet_ids: str | list[str]) -> list[Ticket]:
|
async def get_tickets(wallet_ids: str | list[str]) -> list[Ticket]:
|
||||||
|
|
@ -128,7 +110,17 @@ async def get_tickets(wallet_ids: str | list[str]) -> list[Ticket]:
|
||||||
q = ",".join([f"'{wallet_id}'" for wallet_id in wallet_ids])
|
q = ",".join([f"'{wallet_id}'" for wallet_id in wallet_ids])
|
||||||
rows = await db.fetchall(f"SELECT * FROM events.ticket WHERE wallet IN ({q})")
|
rows = await db.fetchall(f"SELECT * FROM events.ticket WHERE wallet IN ({q})")
|
||||||
|
|
||||||
return [Ticket(**_parse_ticket_row(row)) for row in rows]
|
tickets = []
|
||||||
|
for row in rows:
|
||||||
|
# Convert empty strings back to None for the model
|
||||||
|
ticket_data = dict(row)
|
||||||
|
if ticket_data.get("name") == "":
|
||||||
|
ticket_data["name"] = None
|
||||||
|
if ticket_data.get("email") == "":
|
||||||
|
ticket_data["email"] = None
|
||||||
|
tickets.append(Ticket(**ticket_data))
|
||||||
|
|
||||||
|
return tickets
|
||||||
|
|
||||||
|
|
||||||
async def get_tickets_by_user_id(user_id: str) -> list[Ticket]:
|
async def get_tickets_by_user_id(user_id: str) -> list[Ticket]:
|
||||||
|
|
@ -138,7 +130,17 @@ async def get_tickets_by_user_id(user_id: str) -> list[Ticket]:
|
||||||
{"user_id": user_id}
|
{"user_id": user_id}
|
||||||
)
|
)
|
||||||
|
|
||||||
return [Ticket(**_parse_ticket_row(row)) for row in rows]
|
tickets = []
|
||||||
|
for row in rows:
|
||||||
|
# Convert empty strings back to None for the model
|
||||||
|
ticket_data = dict(row)
|
||||||
|
if ticket_data.get("name") == "":
|
||||||
|
ticket_data["name"] = None
|
||||||
|
if ticket_data.get("email") == "":
|
||||||
|
ticket_data["email"] = None
|
||||||
|
tickets.append(Ticket(**ticket_data))
|
||||||
|
|
||||||
|
return tickets
|
||||||
|
|
||||||
|
|
||||||
async def delete_ticket(payment_hash: str) -> None:
|
async def delete_ticket(payment_hash: str) -> None:
|
||||||
|
|
@ -210,4 +212,14 @@ async def get_event_tickets(event_id: str) -> list[Ticket]:
|
||||||
{"event": event_id},
|
{"event": event_id},
|
||||||
)
|
)
|
||||||
|
|
||||||
return [Ticket(**_parse_ticket_row(row)) for row in rows]
|
tickets = []
|
||||||
|
for row in rows:
|
||||||
|
# Convert empty strings back to None for the model
|
||||||
|
ticket_data = dict(row)
|
||||||
|
if ticket_data.get("name") == "":
|
||||||
|
ticket_data["name"] = None
|
||||||
|
if ticket_data.get("email") == "":
|
||||||
|
ticket_data["email"] = None
|
||||||
|
tickets.append(Ticket(**ticket_data))
|
||||||
|
|
||||||
|
return tickets
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue