diff --git a/lnbits/extensions/events/tasks.py b/lnbits/extensions/events/tasks.py index d29215bf..5eae7373 100644 --- a/lnbits/extensions/events/tasks.py +++ b/lnbits/extensions/events/tasks.py @@ -1,15 +1,6 @@ import asyncio -import json -from http import HTTPStatus -from urllib.parse import urlparse -import httpx -from fastapi import HTTPException -from loguru import logger - -from lnbits import bolt11 from lnbits.core.models import Payment -from lnbits.core.services import pay_invoice from lnbits.extensions.events.models import CreateTicket from lnbits.helpers import get_current_extension_name from lnbits.tasks import register_invoice_listener @@ -29,11 +20,17 @@ async def wait_for_paid_invoices(): async def on_invoice_paid(payment: Payment) -> None: # (avoid loops) if ( - "events" == payment.extra.get("tag") + payment.extra + and "events" == payment.extra.get("tag") and payment.extra.get("name") and payment.extra.get("email") ): - CreateTicket.name = str(payment.extra.get("name")) - CreateTicket.email = str(payment.extra.get("email")) - await api_ticket_send_ticket(payment.memo, payment.payment_hash, CreateTicket) + await api_ticket_send_ticket( + payment.memo, + payment.payment_hash, + CreateTicket( + name=str(payment.extra.get("name")), + email=str(payment.extra.get("email")), + ), + ) return diff --git a/lnbits/extensions/events/views.py b/lnbits/extensions/events/views.py index 16875e81..4ed56795 100644 --- a/lnbits/extensions/events/views.py +++ b/lnbits/extensions/events/views.py @@ -1,8 +1,7 @@ from datetime import date, datetime from http import HTTPStatus -from fastapi import Request -from fastapi.params import Depends +from fastapi import Depends, Request from fastapi.templating import Jinja2Templates from starlette.exceptions import HTTPException from starlette.responses import HTMLResponse diff --git a/lnbits/extensions/events/views_api.py b/lnbits/extensions/events/views_api.py index 668e7f77..4ed3932f 100644 --- a/lnbits/extensions/events/views_api.py +++ b/lnbits/extensions/events/views_api.py @@ -1,10 +1,7 @@ from http import HTTPStatus -from fastapi.param_functions import Query -from fastapi.params import Depends -from loguru import logger +from fastapi import Depends, Query from starlette.exceptions import HTTPException -from starlette.requests import Request from lnbits.core.crud import get_user from lnbits.core.services import create_invoice @@ -38,7 +35,8 @@ async def api_events( wallet_ids = [wallet.wallet.id] if all_wallets: - wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids + user = await get_user(wallet.wallet.user) + wallet_ids = user.wallet_ids if user else [] return [event.dict() for event in await get_events(wallet_ids)] @@ -92,7 +90,8 @@ async def api_tickets( wallet_ids = [wallet.wallet.id] if all_wallets: - wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids + user = await get_user(wallet.wallet.user) + wallet_ids = user.wallet_ids if user else [] return [ticket.dict() for ticket in await get_tickets(wallet_ids)] @@ -119,26 +118,32 @@ async def api_ticket_make_ticket(event_id, name, email): @events_ext.post("/api/v1/tickets/{event_id}/{payment_hash}") async def api_ticket_send_ticket(event_id, payment_hash, data: CreateTicket): event = await get_event(event_id) - try: - status = await api_payment(payment_hash) - if status["paid"]: - ticket = await create_ticket( - payment_hash=payment_hash, - wallet=event.wallet, - event=event_id, - name=data.name, - email=data.email, + if not event: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Event could not be fetched.", + ) + + status = await api_payment(payment_hash) + if status["paid"]: + + exists = await get_ticket(payment_hash) + if exists: + return {"paid": True, "ticket_id": exists.id} + + ticket = await create_ticket( + payment_hash=payment_hash, + wallet=event.wallet, + event=event_id, + name=data.name, + email=data.email, + ) + if not ticket: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Event could not be fetched.", ) - - if not ticket: - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail=f"Event could not be fetched.", - ) - - return {"paid": True, "ticket_id": ticket.id} - except Exception: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND, detail="Not paid") + return {"paid": True, "ticket_id": ticket.id} return {"paid": False} diff --git a/pyproject.toml b/pyproject.toml index 3ddfc92c..186e2123 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -92,7 +92,6 @@ exclude = """(?x)( ^lnbits/extensions/bleskomat. | ^lnbits/extensions/boltz. | ^lnbits/extensions/boltcards. - | ^lnbits/extensions/events. | ^lnbits/extensions/gerty. | ^lnbits/extensions/invoices. | ^lnbits/extensions/livestream.