feat: events_list_event_tickets RPC for organizer ticket roster
Second nostr-transport handler on this branch. Returns paid + registered counts plus the per-ticket roster (id, name, registered status, timestamp) for one calendar event, organizer-only. Backs the door scanner's counts strip and "scanned" list with backend truth so a second organizer scanning on another device, an operator switching from mobile to laptop mid-event, or a refresh in incognito all see the same numbers instead of diverging from a per-device localStorage cache. Same authorisation posture as events_ticket_register: dispatcher binds caller pubkey to wallet via AUTH_WALLET, handler verifies the event's wallet is in the caller's wallet set. Only paid tickets land in the response — proposed/unpaid rows are irrelevant at the door. Webapp consumes this in aiolabs/webapp#73.
This commit is contained in:
parent
1d8dacbaa3
commit
02071e6541
3 changed files with 75 additions and 3 deletions
9
crud.py
9
crud.py
|
|
@ -139,6 +139,15 @@ async def get_tickets(wallet_ids: str | list[str]) -> list[Ticket]:
|
|||
return [Ticket(**_parse_ticket_row(row)) for row in rows]
|
||||
|
||||
|
||||
async def get_tickets_by_event(event_id: str) -> list[Ticket]:
|
||||
"""All ticket rows for the given calendar event id."""
|
||||
rows = await db.fetchall(
|
||||
"SELECT * FROM events.ticket WHERE event = :event_id",
|
||||
{"event_id": event_id},
|
||||
)
|
||||
return [Ticket(**_parse_ticket_row(row)) for row in rows]
|
||||
|
||||
|
||||
async def get_tickets_by_user_id(user_id: str) -> list[Ticket]:
|
||||
"""All tickets owned by the given LNbits user_id."""
|
||||
rows = await db.fetchall(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue