diff --git a/functions/handle-participant-joined-left-background/index.js b/functions/handle-participant-joined-left-background/index.js new file mode 100644 index 0000000..2312907 --- /dev/null +++ b/functions/handle-participant-joined-left-background/index.js @@ -0,0 +1,58 @@ +require('dotenv').config(); + +const { updateMeetingAttendence } = require('../zoom-meeting-webhook-handler/slack.js'); + +const rooms = require('../../data/rooms.json'); + +const handler = async function (event, context) { + try { + const request = JSON.parse(event.body); + + // check our meeting ID. The meeting ID never changes, but the uuid is different for each instance + + const room = rooms.find( + (room) => room.ZoomMeetingId === request.payload.object.id + ); + + if (room) { + const Airtable = require('airtable'); + const base = new Airtable().base(process.env.AIRTABLE_COWORKING_BASE); + + const { findRoomInstance } = require('../zoom-meeting-webhook-handler/airtable'); + + let roomInstance = await findRoomInstance( + room, + base, + request.payload.object.uuid + ); + + if (roomInstance) { + // create room event record + console.log(`found room instance ${roomInstance.getId()}`); + + const updatedMeeting = await updateMeetingAttendence( + room, + roomInstance.get('slack_thread_timestamp'), + request + ); + } + } else { + console.log('meeting ID is not co-working meeting'); + } + + return { + statusCode: 200, + body: '', + }; + } catch (error) { + // output to netlify function log + console.log(error); + return { + statusCode: 500, + // Could be a custom message or object i.e. JSON.stringify(err) + body: JSON.stringify({ msg: error.message }), + }; + } +}; + +module.exports = { handler }; \ No newline at end of file diff --git a/functions/zoom-meeting-webhook-handler/index.js b/functions/zoom-meeting-webhook-handler/index.js index 76fa365..4ae7300 100644 --- a/functions/zoom-meeting-webhook-handler/index.js +++ b/functions/zoom-meeting-webhook-handler/index.js @@ -18,6 +18,8 @@ const ZOOM_SECRET = const ZOOM_AUTH = process.env.TEST_ZOOM_WEBHOOK_AUTH || process.env.ZOOM_WEBHOOK_AUTH; +const APP_HOST = process.env.TEST_APP_HOST || process.env.APP_HOST; + const handler = async function (event, context) { try { /** @@ -96,23 +98,19 @@ const handler = async function (event, context) { switch (request.event) { case EVENT_PARTICIPANT_JOINED: case EVENT_PARTICIPANT_LEFT: - let roomInstance = await findRoomInstance( - room, - base, - request.payload.object.uuid - ); + console.log('CALLING handle-participant-joined-left-background') - if (roomInstance) { - // create room event record - console.log(`found room instance ${roomInstance.getId()}`); + response = await fetch(`${APP_HOST}/handle-participant-joined-left-background`, { + method: 'POST', + body: event.body, + }); - const updatedMeeting = await updateMeetingAttendence( - room, - roomInstance.get('slack_thread_timestamp'), - request - ); + if (!response.ok) { + throw new Error(`Error: ${response.status} ${response.statusText}`); } + console.log('EXITING IMMEDIATELY FROM zoom-meeting-webhook-handler') + break; case EVENT_MEETING_STARTED: @@ -190,4 +188,4 @@ const handler = async function (event, context) { } }; -module.exports = { handler }; +module.exports = { handler }; \ No newline at end of file diff --git a/netlify.toml b/netlify.toml index 287f05a..227216e 100644 --- a/netlify.toml +++ b/netlify.toml @@ -26,3 +26,8 @@ from = "/event-reminders" to = "/.netlify/functions/event-reminders-background" status = 200 + +[[redirects]] + from = "/handle-participant-joined-left-background" + to = "/.netlify/functions/handle-participant-joined-left-background" + status = 200