From 1cc5e6da7e0e1f0b5cc5642f441ad67e3e8e7efc Mon Sep 17 00:00:00 2001 From: dni Date: Tue, 5 May 2026 09:10:34 +0200 Subject: [PATCH 1/4] feat: register public page saves to localstorage previsously it fetched all tickets without much information. now it saves the full scanned ticket after it was scanned, so it can be checked by some1 without a login --- static/js/register.js | 33 +++++++++++++++------------------ views_api.py | 10 +--------- 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/static/js/register.js b/static/js/register.js index 76ccbcb..c14e623 100644 --- a/static/js/register.js +++ b/static/js/register.js @@ -5,18 +5,15 @@ window.PageEventsRegister = { tickets: [], ticketsTable: { columns: [ + {name: 'id', align: 'left', label: 'ID', field: 'id'}, {name: 'name', align: 'left', label: 'Name', field: 'name'}, + {name: 'email', align: 'left', label: 'Email', field: 'email'}, + {name: 'paid', align: 'left', label: 'Paid', field: 'paid'}, { name: 'registered', align: 'left', label: 'Registered', field: 'registered' - }, - { - name: 'paid', - align: 'left', - label: 'Paid', - field: 'paid' } ], pagination: { @@ -30,8 +27,15 @@ window.PageEventsRegister = { } }, methods: { - hoverEmail(tmp) { - this.tickets.data.emailtemp = tmp + storageKey() { + return `events_scanned_${this.eventId}` + }, + loadScannedTickets() { + this.tickets = Quasar.LocalStorage.getItem(this.storageKey()) || [] + }, + saveScannedTicket(ticket) { + this.tickets.unshift(ticket) + Quasar.LocalStorage.set(this.storageKey(), this.tickets) }, closeCamera() { this.sendCamera.show = false @@ -44,25 +48,18 @@ window.PageEventsRegister = { const value = res[0].rawValue.split('//')[1] LNbits.api .request('PUT', `/events/api/v1/tickets/register/${value}`) - .then(() => { + .then(response => { + this.saveScannedTicket(response.data) Quasar.Notify.create({ type: 'positive', message: 'Registered!' }) }) .catch(LNbits.utils.notifyApiError) - }, - getEventTickets() { - LNbits.api - .request('GET', `/events/api/v1/events/${this.eventId}/tickets`) - .then(response => { - this.tickets = response.data - }) - .catch(LNbits.utils.notifyApiError) } }, created() { this.eventId = this.$route.params.id - this.getEventTickets() + this.loadScannedTickets() } } diff --git a/views_api.py b/views_api.py index d9789ec..6826e58 100644 --- a/views_api.py +++ b/views_api.py @@ -30,7 +30,6 @@ delete_event_tickets, delete_ticket, get_event, - get_event_tickets, get_events, get_ticket, get_tickets, @@ -164,13 +163,6 @@ async def api_form_delete( await delete_event_tickets(event_id) -@events_api_router.get( - "/{event_id}/tickets", - response_model=list[PublicTicket], -) -async def api_event_tickets(event_id: str) -> list[Ticket]: - return await get_event_tickets(event_id) - @tickets_api_router.get("") async def api_tickets( @@ -323,7 +315,7 @@ async def api_ticket_delete( await delete_ticket(ticket_id) -@tickets_api_router.put("/register/{ticket_id}", response_model=PublicTicket) +@tickets_api_router.put("/register/{ticket_id}") async def api_event_register_ticket(ticket_id) -> Ticket: ticket = await get_ticket(ticket_id) From 62afbd4b2705d3e60c62d629924f06f8ac4f629f Mon Sep 17 00:00:00 2001 From: dni Date: Tue, 5 May 2026 09:16:58 +0200 Subject: [PATCH 2/4] add last scan --- static/js/register.js | 19 +++++++++++++------ static/js/register.vue | 20 ++++++++++++++++++++ views_api.py | 1 - 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/static/js/register.js b/static/js/register.js index c14e623..e67fb34 100644 --- a/static/js/register.js +++ b/static/js/register.js @@ -23,7 +23,8 @@ window.PageEventsRegister = { sendCamera: { show: false, camera: 'auto' - } + }, + lastScan: null } }, methods: { @@ -50,12 +51,18 @@ window.PageEventsRegister = { .request('PUT', `/events/api/v1/tickets/register/${value}`) .then(response => { this.saveScannedTicket(response.data) - Quasar.Notify.create({ - type: 'positive', - message: 'Registered!' - }) + this.lastScan = {success: true, ticket: response.data} + Quasar.Notify.create({type: 'positive', message: 'Registered!'}) + }) + .catch(error => { + this.lastScan = { + success: false, + ticketId: value, + error: + error.response?.data?.detail || error.message || 'Unknown error' + } + LNbits.utils.notifyApiError(error) }) - .catch(LNbits.utils.notifyApiError) } }, created() { diff --git a/static/js/register.vue b/static/js/register.vue index 9b40537..67468c4 100644 --- a/static/js/register.vue +++ b/static/js/register.vue @@ -16,6 +16,26 @@ + + +
+
Registered
+
Name: {{ lastScan.ticket.name }}
+
Email: {{ lastScan.ticket.email }}
+
Paid: {{ lastScan.ticket.paid }}
+
ID: {{ lastScan.ticket.id }}
+
+
+
Failed
+
Ticket ID: {{ lastScan.ticketId }}
+
Error: {{ lastScan.error }}
+
+
+
+ Date: Tue, 5 May 2026 09:25:59 +0200 Subject: [PATCH 3/4] short id --- static/js/register.js | 12 +++++++----- static/js/register.vue | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/static/js/register.js b/static/js/register.js index e67fb34..f642493 100644 --- a/static/js/register.js +++ b/static/js/register.js @@ -5,15 +5,14 @@ window.PageEventsRegister = { tickets: [], ticketsTable: { columns: [ - {name: 'id', align: 'left', label: 'ID', field: 'id'}, {name: 'name', align: 'left', label: 'Name', field: 'name'}, {name: 'email', align: 'left', label: 'Email', field: 'email'}, - {name: 'paid', align: 'left', label: 'Paid', field: 'paid'}, { - name: 'registered', + name: 'id', align: 'left', - label: 'Registered', - field: 'registered' + label: 'ID', + field: 'id', + format: val => this.shortId(val) } ], pagination: { @@ -44,6 +43,9 @@ window.PageEventsRegister = { showCamera() { this.sendCamera.show = true }, + shortId(id) { + return id ? `${id.slice(0, 6)}...${id.slice(-4)}` : '' + }, decodeQR(res) { this.sendCamera.show = false const value = res[0].rawValue.split('//')[1] diff --git a/static/js/register.vue b/static/js/register.vue index 67468c4..c1461e0 100644 --- a/static/js/register.vue +++ b/static/js/register.vue @@ -26,11 +26,11 @@
Name: {{ lastScan.ticket.name }}
Email: {{ lastScan.ticket.email }}
Paid: {{ lastScan.ticket.paid }}
-
ID: {{ lastScan.ticket.id }}
+
ID: {{ shortId(lastScan.ticket.id) }}
Failed
-
Ticket ID: {{ lastScan.ticketId }}
+
Ticket ID: {{ shortId(lastScan.ticketId) }}
Error: {{ lastScan.error }}
From 75170cbd6af81c17876d7f22b71e50e76eb7dc87 Mon Sep 17 00:00:00 2001 From: dni Date: Tue, 5 May 2026 09:30:12 +0200 Subject: [PATCH 4/4] prettier --- static/js/register.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/static/js/register.vue b/static/js/register.vue index c1461e0..8055348 100644 --- a/static/js/register.vue +++ b/static/js/register.vue @@ -30,7 +30,9 @@
Failed
-
Ticket ID: {{ shortId(lastScan.ticketId) }}
+
+ Ticket ID: {{ shortId(lastScan.ticketId) }} +
Error: {{ lastScan.error }}