From a77ac9a3f9268e9b24e9ac224d1eeae27866c40c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Tue, 11 Jun 2024 12:30:37 +0200 Subject: [PATCH] feat(eventbrite): add new attendee registered trigger --- .../src/apps/eventbrite/triggers/index.js | 3 +- .../triggers/new-attendee-registered/index.js | 120 ++++++++++++++++++ .../docs/pages/apps/eventbrite/triggers.md | 2 + 3 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/eventbrite/triggers/new-attendee-registered/index.js diff --git a/packages/backend/src/apps/eventbrite/triggers/index.js b/packages/backend/src/apps/eventbrite/triggers/index.js index 13b5fc05..c6992fbc 100644 --- a/packages/backend/src/apps/eventbrite/triggers/index.js +++ b/packages/backend/src/apps/eventbrite/triggers/index.js @@ -1,4 +1,5 @@ import newAttendeeCheckIn from './new-attendee-check-in/index.js'; +import newAttendeeRegistered from './new-attendee-registered/index.js'; import newEvents from './new-events/index.js'; -export default [newAttendeeCheckIn, newEvents]; +export default [newAttendeeCheckIn, newAttendeeRegistered, newEvents]; diff --git a/packages/backend/src/apps/eventbrite/triggers/new-attendee-registered/index.js b/packages/backend/src/apps/eventbrite/triggers/new-attendee-registered/index.js new file mode 100644 index 00000000..d85ec3c2 --- /dev/null +++ b/packages/backend/src/apps/eventbrite/triggers/new-attendee-registered/index.js @@ -0,0 +1,120 @@ +import Crypto from 'crypto'; +import defineTrigger from '../../../../helpers/define-trigger.js'; + +export default defineTrigger({ + name: 'New attendee registered', + key: 'newAttendeeRegistered', + type: 'webhook', + description: 'Triggers when an attendee orders a ticket for an event.', + arguments: [ + { + label: 'Organization', + key: 'organizationId', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listOrganizations', + }, + ], + }, + }, + { + label: 'Event', + key: 'eventId', + type: 'dropdown', + required: false, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listEvents', + }, + { + name: 'parameters.organizationId', + value: '{parameters.organizationId}', + }, + ], + }, + }, + ], + + async run($) { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async testRun($) { + const eventId = $.step.parameters.eventId; + const organizationId = $.step.parameters.organizationId; + + const params = { + event_id: eventId, + }; + + const { + data: { orders }, + } = await $.http.get(`/v3/events/${eventId}/orders/`, params); + + if (orders.length === 0) { + return; + } + + const computedWebhookEvent = { + config: { + action: 'order.placed', + user_id: organizationId, + webhook_id: '11111111', + endpoint_url: $.webhookUrl, + }, + api_url: orders[0].resource_uri, + }; + + const dataItem = { + raw: computedWebhookEvent, + meta: { + internalId: computedWebhookEvent.user_id, + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async registerHook($) { + const organizationId = $.step.parameters.organizationId; + const eventId = $.step.parameters.eventId; + + const payload = { + endpoint_url: $.webhookUrl, + actions: 'order.placed', + event_id: eventId, + }; + + const { data } = await $.http.post( + `/v3/organizations/${organizationId}/webhooks/`, + payload + ); + + await $.flow.setRemoteWebhookId(data.id); + }, + + async unregisterHook($) { + await $.http.delete(`/v3/webhooks/${$.flow.remoteWebhookId}/`); + }, +}); diff --git a/packages/docs/pages/apps/eventbrite/triggers.md b/packages/docs/pages/apps/eventbrite/triggers.md index e2623eb3..afab3406 100644 --- a/packages/docs/pages/apps/eventbrite/triggers.md +++ b/packages/docs/pages/apps/eventbrite/triggers.md @@ -3,6 +3,8 @@ favicon: /favicons/eventbrite.svg items: - name: New attendee check in desc: Triggers when an attendee's barcode is scanned in. + - name: New attendee registered + desc: Triggers when an attendee orders a ticket for an event. - name: New events desc: Triggers when a new event is published and live within an organization. ---