feat: add promo codes and conditional events (#40)
* add extra column
* add conditional events
* refunds
* conditional events working
* adding promo codes
* promo codes logic
---------
Co-authored-by: dni ⚡ <office@dnilabs.com>
This commit is contained in:
parent
44f2cb5a62
commit
a9ac6dcfc1
10 changed files with 463 additions and 71 deletions
38
services.py
38
services.py
|
|
@ -1,4 +1,13 @@
|
|||
from .crud import get_event, update_event, update_ticket
|
||||
from lnurl import execute
|
||||
from loguru import logger
|
||||
|
||||
from .crud import (
|
||||
get_event,
|
||||
get_event_tickets,
|
||||
purge_unpaid_tickets,
|
||||
update_event,
|
||||
update_ticket,
|
||||
)
|
||||
from .models import Ticket
|
||||
|
||||
|
||||
|
|
@ -16,3 +25,30 @@ async def set_ticket_paid(ticket: Ticket) -> Ticket:
|
|||
await update_event(event)
|
||||
|
||||
return ticket
|
||||
|
||||
|
||||
async def refund_tickets(event_id: str):
|
||||
"""
|
||||
Refund tickets for an event that has not met the minimum ticket requirement.
|
||||
This function should be called when the event is closed and the minimum ticket
|
||||
condition is not met.
|
||||
"""
|
||||
await purge_unpaid_tickets(event_id)
|
||||
tickets = await get_event_tickets(event_id)
|
||||
|
||||
if not tickets:
|
||||
return
|
||||
|
||||
for ticket in tickets:
|
||||
if ticket.extra.refunded:
|
||||
continue
|
||||
if ticket.paid and ticket.extra.refund_address and ticket.extra.sats_paid:
|
||||
try:
|
||||
res = await execute(
|
||||
ticket.extra.refund_address, str(ticket.extra.sats_paid)
|
||||
)
|
||||
if res:
|
||||
ticket.extra.refunded = True
|
||||
await update_ticket(ticket)
|
||||
except Exception as e:
|
||||
logger.error(f"Error refunding ticket {ticket.id}: {e}")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue