feat: UI fixes, ticket waves, ticket image (#52)
* email input fixes * promo code ui fix * ticket waves * works, but horrible slop * slightly cleaner * filter most recent * make * pyright
This commit is contained in:
parent
4bf867eef0
commit
777c107c63
12 changed files with 1557 additions and 302 deletions
45
crud.py
45
crud.py
|
|
@ -1,9 +1,17 @@
|
|||
from datetime import datetime, timedelta, timezone
|
||||
from typing import cast
|
||||
|
||||
from lnbits.db import Database
|
||||
from lnbits.db import Database, Filters, Page
|
||||
from lnbits.helpers import urlsafe_short_hash
|
||||
|
||||
from .models import CreateEvent, Event, Ticket, TicketExtra
|
||||
from .models import (
|
||||
CreateEvent,
|
||||
Event,
|
||||
Ticket,
|
||||
TicketExtra,
|
||||
TicketFilters,
|
||||
sync_event_ticket_waves,
|
||||
)
|
||||
|
||||
db = Database("ext_events")
|
||||
|
||||
|
|
@ -51,6 +59,31 @@ async def get_tickets(wallet_ids: str | list[str]) -> list[Ticket]:
|
|||
)
|
||||
|
||||
|
||||
async def get_tickets_paginated(
|
||||
wallet_ids: str | list[str], filters: Filters[TicketFilters] | None = None
|
||||
) -> Page[Ticket]:
|
||||
if isinstance(wallet_ids, str):
|
||||
wallet_ids = [wallet_ids]
|
||||
|
||||
wallet_where = []
|
||||
values = {}
|
||||
for idx, wallet_id in enumerate(wallet_ids):
|
||||
key = f"wallet_id_{idx}"
|
||||
wallet_where.append(f":{key}")
|
||||
values[key] = wallet_id
|
||||
|
||||
where = [f"wallet IN ({', '.join(wallet_where)})", "paid = true"]
|
||||
|
||||
return await db.fetch_page(
|
||||
"SELECT * FROM events.ticket",
|
||||
where=where,
|
||||
values=values,
|
||||
filters=filters,
|
||||
model=Ticket,
|
||||
table_name="events.ticket",
|
||||
)
|
||||
|
||||
|
||||
async def delete_ticket(payment_hash: str) -> None:
|
||||
await db.execute("DELETE FROM events.ticket WHERE id = :id", {"id": payment_hash})
|
||||
|
||||
|
|
@ -75,31 +108,35 @@ async def purge_unpaid_tickets(event_id: str) -> None:
|
|||
async def create_event(data: CreateEvent) -> Event:
|
||||
event_id = urlsafe_short_hash()
|
||||
event = Event(id=event_id, time=datetime.now(timezone.utc), **data.dict())
|
||||
event = cast(Event, sync_event_ticket_waves(event))
|
||||
await db.insert("events.events", event)
|
||||
return event
|
||||
|
||||
|
||||
async def update_event(event: Event) -> Event:
|
||||
event = cast(Event, sync_event_ticket_waves(event))
|
||||
await db.update("events.events", event)
|
||||
return event
|
||||
|
||||
|
||||
async def get_event(event_id: str) -> Event | None:
|
||||
return await db.fetchone(
|
||||
event = await db.fetchone(
|
||||
"SELECT * FROM events.events WHERE id = :id",
|
||||
{"id": event_id},
|
||||
Event,
|
||||
)
|
||||
return cast(Event, sync_event_ticket_waves(event)) if event else None
|
||||
|
||||
|
||||
async def get_events(wallet_ids: str | list[str]) -> list[Event]:
|
||||
if isinstance(wallet_ids, str):
|
||||
wallet_ids = [wallet_ids]
|
||||
q = ",".join([f"'{wallet_id}'" for wallet_id in wallet_ids])
|
||||
return await db.fetchall(
|
||||
events = await db.fetchall(
|
||||
f"SELECT * FROM events.events WHERE wallet IN ({q})",
|
||||
model=Event,
|
||||
)
|
||||
return [cast(Event, sync_event_ticket_waves(event)) for event in events]
|
||||
|
||||
|
||||
async def delete_event(event_id: str) -> None:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue