parent
4586164016
commit
c8b31d8e3f
7 changed files with 33 additions and 15 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
# Events - <small>[LNbits](https://github.com/lnbits/lnbits) extension</small>
|
# Events - <small>[LNbits](https://github.com/lnbits/lnbits) extension</small>
|
||||||
|
|
||||||
<small>For more about LNBits extension check [this tutorial](https://github.com/lnbits/lnbits/wiki/LNbits-Extensions)</small>
|
<small>For more about LNBits extension check [this tutorial](https://github.com/lnbits/lnbits/wiki/LNbits-Extensions)</small>
|
||||||
|
|
||||||
## Sell tickets for events and use the built-in scanner for registering attendants
|
## Sell tickets for events and use the built-in scanner for registering attendants
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "Events",
|
"name": "Events",
|
||||||
"short_description": "Sell and register event tickets",
|
"short_description": "Sell and register event tickets",
|
||||||
"tile": "/events/static/image/events.png",
|
"tile": "/events/static/image/events.png",
|
||||||
"contributors": ["benarc"]
|
"contributors": ["benarc"]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
3
crud.py
3
crud.py
|
|
@ -135,7 +135,8 @@ async def get_event_tickets(event_id: str, wallet_id: str) -> List[Ticket]:
|
||||||
|
|
||||||
async def reg_ticket(ticket_id: str) -> List[Ticket]:
|
async def reg_ticket(ticket_id: str) -> List[Ticket]:
|
||||||
await db.execute(
|
await db.execute(
|
||||||
"UPDATE events.ticket SET registered = ? WHERE id = ?", (True, ticket_id)
|
f"UPDATE events.ticket SET registered = ?, reg_timestamp = {db.timestamp_now} WHERE id = ?",
|
||||||
|
(True, ticket_id),
|
||||||
)
|
)
|
||||||
ticket = await db.fetchone("SELECT * FROM events.ticket WHERE id = ?", (ticket_id,))
|
ticket = await db.fetchone("SELECT * FROM events.ticket WHERE id = ?", (ticket_id,))
|
||||||
rows = await db.fetchall(
|
rows = await db.fetchall(
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"repos": [
|
"repos": [
|
||||||
{
|
{
|
||||||
"id": "events",
|
"id": "events",
|
||||||
"organisation": "lnbits",
|
"organisation": "lnbits",
|
||||||
"repository": "events"
|
"repository": "events"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
async def m001_initial(db):
|
async def m001_initial(db):
|
||||||
|
|
||||||
await db.execute(
|
await db.execute(
|
||||||
"""
|
"""
|
||||||
CREATE TABLE events.events (
|
CREATE TABLE events.events (
|
||||||
|
|
@ -38,7 +37,6 @@ async def m001_initial(db):
|
||||||
|
|
||||||
|
|
||||||
async def m002_changed(db):
|
async def m002_changed(db):
|
||||||
|
|
||||||
await db.execute(
|
await db.execute(
|
||||||
"""
|
"""
|
||||||
CREATE TABLE events.ticket (
|
CREATE TABLE events.ticket (
|
||||||
|
|
@ -81,3 +79,12 @@ async def m002_changed(db):
|
||||||
(row[0], row[1], row[2], row[3], row[4], row[5], True),
|
(row[0], row[1], row[2], row[3], row[4], row[5], True),
|
||||||
)
|
)
|
||||||
await db.execute("DROP TABLE events.tickets")
|
await db.execute("DROP TABLE events.tickets")
|
||||||
|
|
||||||
|
|
||||||
|
async def m003_add_register_timestamp(db):
|
||||||
|
"""
|
||||||
|
Add a column to register the timestamp of ticket register
|
||||||
|
"""
|
||||||
|
await db.execute(
|
||||||
|
"ALTER TABLE events.ticket ADD COLUMN reg_timestamp TIMESTAMP;"
|
||||||
|
) # NULL means not registered, or old ticket
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
from fastapi import Query
|
from fastapi import Query
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
class CreateEvent(BaseModel):
|
class CreateEvent(BaseModel):
|
||||||
|
|
@ -39,5 +40,6 @@ class Ticket(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
email: str
|
email: str
|
||||||
registered: bool
|
registered: bool
|
||||||
|
reg_timestamp: Optional[int]
|
||||||
paid: bool
|
paid: bool
|
||||||
time: int
|
time: int
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,13 @@ async def api_ticket_make_ticket(event_id, name, email):
|
||||||
memo=f"{event_id}",
|
memo=f"{event_id}",
|
||||||
extra={"tag": "events", "name": name, "email": email},
|
extra={"tag": "events", "name": name, "email": email},
|
||||||
)
|
)
|
||||||
await create_ticket(payment_hash=payment_hash, wallet=event.wallet, event=event.id, name=name, email=email)
|
await create_ticket(
|
||||||
|
payment_hash=payment_hash,
|
||||||
|
wallet=event.wallet,
|
||||||
|
event=event.id,
|
||||||
|
name=name,
|
||||||
|
email=email,
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(e))
|
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(e))
|
||||||
return {"payment_hash": payment_hash, "payment_request": payment_request}
|
return {"payment_hash": payment_hash, "payment_request": payment_request}
|
||||||
|
|
@ -167,6 +173,7 @@ async def api_event_tickets(wallet_id, event_id):
|
||||||
@events_ext.get("/api/v1/register/ticket/{ticket_id}")
|
@events_ext.get("/api/v1/register/ticket/{ticket_id}")
|
||||||
async def api_event_register_ticket(ticket_id):
|
async def api_event_register_ticket(ticket_id):
|
||||||
ticket = await get_ticket(ticket_id)
|
ticket = await get_ticket(ticket_id)
|
||||||
|
|
||||||
if not ticket:
|
if not ticket:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=HTTPStatus.NOT_FOUND, detail="Ticket does not exist."
|
status_code=HTTPStatus.NOT_FOUND, detail="Ticket does not exist."
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue