Browse Source

Events extension now works

LNURLwalletsupport
arcbtc 5 years ago
parent
commit
784a2dd876
  1. 0
      lnbits/extensions/events/config.json
  2. 41
      lnbits/extensions/events/crud.py
  3. 1
      lnbits/extensions/events/migrations.py
  4. 1
      lnbits/extensions/events/models.py
  5. 18
      lnbits/extensions/events/templates/events/display.html
  6. 6
      lnbits/extensions/events/templates/events/register.html
  7. 36
      lnbits/extensions/events/views_api.py

0
lnbits/extensions/events/config.json.example → lnbits/extensions/events/config.json

41
lnbits/extensions/events/crud.py

@ -9,33 +9,46 @@ from .models import Tickets, Events
#######TICKETS######## #######TICKETS########
def create_ticket(wallet: str, event: str, name: str, email: str) -> Tickets: def create_ticket(checking_id: str, wallet: str, event: str, name: str, email: str) -> Tickets:
with open_ext_db("events") as db:
db.execute(
"""
INSERT INTO tickets (id, paid, wallet, event, name, email, registered)
VALUES (?, ?, ?, ?, ?, ?, ?)
""",
(checking_id, False, wallet, event, name, email, False),
)
return get_ticket(checking_id)
def update_ticket(paid: bool, checking_id: str) -> Tickets:
with open_ext_db("events") as db: with open_ext_db("events") as db:
eventdata = get_event(event)
sold = eventdata.sold + 1
amount_tickets = eventdata.amount_tickets - 1
ticket_id = urlsafe_short_hash()
db.execute( db.execute(
""" """
INSERT INTO tickets (id, wallet, event, name, email, registered) UPDATE tickets
VALUES (?, ?, ?, ?, ?, ?) SET paid = ?
WHERE id = ?
""", """,
(ticket_id, wallet, event, name, email, False), (paid, checking_id),
) )
row = db.fetchone("SELECT * FROM tickets WHERE id = ?", (checking_id,))
eventdata = get_event(row[3])
sold = eventdata.sold + 1
amount_tickets = eventdata.amount_tickets - 1
db.execute( db.execute(
""" """
UPDATE events UPDATE events
SET sold = ?, amount_tickets = ? SET sold = ?, amount_tickets = ?
WHERE id = ? WHERE id = ?
""", """,
(sold, amount_tickets, event), (sold, amount_tickets, row[3]),
) )
return get_ticket(ticket_id) return get_ticket(checking_id)
def get_ticket(ticket_id: str) -> Optional[Tickets]: def get_ticket(checking_id: str) -> Optional[Tickets]:
with open_ext_db("events") as db: with open_ext_db("events") as db:
row = db.fetchone("SELECT * FROM tickets WHERE id = ?", (ticket_id,)) row = db.fetchone("SELECT * FROM tickets WHERE id = ?", (checking_id,))
return Tickets(**row) if row else None return Tickets(**row) if row else None
@ -51,9 +64,9 @@ def get_tickets(wallet_ids: Union[str, List[str]]) -> List[Tickets]:
return [Tickets(**row) for row in rows] return [Tickets(**row) for row in rows]
def delete_ticket(ticket_id: str) -> None: def delete_ticket(checking_id: str) -> None:
with open_ext_db("events") as db: with open_ext_db("events") as db:
db.execute("DELETE FROM tickets WHERE id = ?", (ticket_id,)) db.execute("DELETE FROM tickets WHERE id = ?", (checking_id,))

1
lnbits/extensions/events/migrations.py

@ -24,6 +24,7 @@ def m001_initial(db):
""" """
CREATE TABLE IF NOT EXISTS tickets ( CREATE TABLE IF NOT EXISTS tickets (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
paid BOOLEAN NOT NULL,
wallet TEXT NOT NULL, wallet TEXT NOT NULL,
event TEXT NOT NULL, event TEXT NOT NULL,
name TEXT NOT NULL, name TEXT NOT NULL,

1
lnbits/extensions/events/models.py

@ -16,6 +16,7 @@ class Events(NamedTuple):
class Tickets(NamedTuple): class Tickets(NamedTuple):
id: str id: str
paid: bool
wallet: str wallet: str
event: str event: str
name: str name: str

18
lnbits/extensions/events/templates/events/display.html

@ -133,8 +133,15 @@
var self = this var self = this
axios axios
.get('/events/api/v1/tickets/' + '{{ event_id }}/{{ event_price }}') .post(
'/events/api/v1/tickets/' + '{{ event_id }}/{{ event_price }}',
{
event: '{{ event_id }}',
event_name: '{{ event_name }}',
name: self.formDialog.data.name,
email: self.formDialog.data.email
}
)
.then(function (response) { .then(function (response) {
self.paymentReq = response.data.payment_request self.paymentReq = response.data.payment_request
self.paymentCheck = response.data.checking_id self.paymentCheck = response.data.checking_id
@ -152,12 +159,7 @@
paymentChecker = setInterval(function () { paymentChecker = setInterval(function () {
axios axios
.post('/events/api/v1/tickets/' + self.paymentCheck, { .get('/events/api/v1/tickets/' + self.paymentCheck)
event: '{{ event_id }}',
event_name: '{{ event_name }}',
name: self.formDialog.data.name,
email: self.formDialog.data.email
})
.then(function (res) { .then(function (res) {
if (res.data.paid) { if (res.data.paid) {
clearInterval(paymentChecker) clearInterval(paymentChecker)

6
lnbits/extensions/events/templates/events/register.html

@ -156,9 +156,9 @@
type: 'positive', type: 'positive',
message: 'Registered!' message: 'Registered!'
}) })
self.tickets = response.data.map(function (obj) { setTimeout(function () {
return mapEvents(obj) window.location.reload()
}) }, 2000)
}) })
.catch(function (error) { .catch(function (error) {
LNbits.utils.notifyApiError(error) LNbits.utils.notifyApiError(error)

36
lnbits/extensions/events/views_api.py

@ -7,7 +7,7 @@ from lnbits.decorators import api_check_wallet_key, api_validate_post_request
from lnbits.settings import WALLET from lnbits.settings import WALLET
from lnbits.extensions.events import events_ext from lnbits.extensions.events import events_ext
from .crud import create_ticket, get_ticket, get_tickets, delete_ticket, create_event, update_event, get_event, get_events, delete_event, get_event_tickets, reg_ticket from .crud import create_ticket, update_ticket, get_ticket, get_tickets, delete_ticket, create_event, update_event, get_event, get_events, delete_event, get_event_tickets, reg_ticket
#########Events########## #########Events##########
@ -86,11 +86,18 @@ def api_tickets():
return jsonify([ticket._asdict() for ticket in get_tickets(wallet_ids)]), HTTPStatus.OK return jsonify([ticket._asdict() for ticket in get_tickets(wallet_ids)]), HTTPStatus.OK
@events_ext.route("/api/v1/tickets/<event_id>/<sats>", methods=["POST"])
@api_validate_post_request(
schema={
"name": {"type": "string", "empty": False, "required": True},
"email": {"type": "string", "empty": False, "required": True}
})
def api_ticket_make_ticket(event_id, sats):
@events_ext.route("/api/v1/tickets/<event_id>/<sats>", methods=["GET"])
def api_ticket_create(event_id, sats):
event = get_event(event_id) event = get_event(event_id)
if not event:
return jsonify({"message": "LNTicket does not exist."}), HTTPStatus.NOT_FOUND
try: try:
checking_id, payment_request = create_invoice( checking_id, payment_request = create_invoice(
wallet_id=event.wallet, amount=int(sats), memo=f"#lnticket {event_id}" wallet_id=event.wallet, amount=int(sats), memo=f"#lnticket {event_id}"
@ -98,32 +105,27 @@ def api_ticket_create(event_id, sats):
except Exception as e: except Exception as e:
return jsonify({"message": str(e)}), HTTPStatus.INTERNAL_SERVER_ERROR return jsonify({"message": str(e)}), HTTPStatus.INTERNAL_SERVER_ERROR
return jsonify({"checking_id": checking_id, "payment_request": payment_request}), HTTPStatus.OK ticket = create_ticket(checking_id=checking_id, wallet=event.wallet, event=event_id, **g.data)
if not ticket:
return jsonify({"message": "LNTicket could not be fetched."}), HTTPStatus.NOT_FOUND
return jsonify({"checking_id": checking_id, "payment_request": payment_request}), HTTPStatus.OK
@events_ext.route("/api/v1/tickets/<checking_id>", methods=["POST"])
@api_validate_post_request(
schema={
"event": {"type": "string", "empty": False, "required": True},
"name": {"type": "string", "empty": False, "required": True},
"email": {"type": "string", "empty": False, "required": True}
})
def api_ticket_send_ticket(checking_id):
event = get_event(g.data['event']) @events_ext.route("/api/v1/tickets/<checking_id>", methods=["GET"])
if not event: def api_ticket_send_ticket(checking_id):
return jsonify({"message": "LNTicket does not exist."}), HTTPStatus.NOT_FOUND theticket = get_ticket(checking_id)
try: try:
is_paid = not WALLET.get_invoice_status(checking_id).pending is_paid = not WALLET.get_invoice_status(checking_id).pending
except Exception: except Exception:
return jsonify({"message": "Not paid."}), HTTPStatus.NOT_FOUND return jsonify({"message": "Not paid."}), HTTPStatus.NOT_FOUND
if is_paid: if is_paid:
wallet = get_wallet(event.wallet) wallet = get_wallet(theticket.wallet)
payment = wallet.get_payment(checking_id) payment = wallet.get_payment(checking_id)
payment.set_pending(False) payment.set_pending(False)
ticket = create_ticket(wallet=event.wallet, **g.data) ticket = update_ticket(paid=True, checking_id=checking_id)
return jsonify({"paid": True, "ticket_id": ticket.id}), HTTPStatus.OK return jsonify({"paid": True, "ticket_id": ticket.id}), HTTPStatus.OK

Loading…
Cancel
Save