From 242b68889a9c80ce7035011ebf8ac2fe5cd24a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Tue, 19 Sep 2023 12:46:16 +0300 Subject: [PATCH] feat(google-calendar): add new event trigger --- .../google-calendar/dynamic-data/index.ts | 3 + .../dynamic-data/list-calendars/index.ts | 36 ++++++++++++ .../backend/src/apps/google-calendar/index.ts | 2 + .../apps/google-calendar/triggers/index.ts | 3 +- .../triggers/new-event/index.ts | 55 +++++++++++++++++++ .../pages/apps/google-calendar/triggers.md | 2 + 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/google-calendar/dynamic-data/index.ts create mode 100644 packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.ts create mode 100644 packages/backend/src/apps/google-calendar/triggers/new-event/index.ts diff --git a/packages/backend/src/apps/google-calendar/dynamic-data/index.ts b/packages/backend/src/apps/google-calendar/dynamic-data/index.ts new file mode 100644 index 00000000..ef8fc43a --- /dev/null +++ b/packages/backend/src/apps/google-calendar/dynamic-data/index.ts @@ -0,0 +1,3 @@ +import listCalendars from './list-calendars'; + +export default [listCalendars]; diff --git a/packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.ts b/packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.ts new file mode 100644 index 00000000..160c3935 --- /dev/null +++ b/packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.ts @@ -0,0 +1,36 @@ +import { IGlobalVariable, IJSONObject } from '@automatisch/types'; + +export default { + name: 'List calendars', + key: 'listCalendars', + + async run($: IGlobalVariable) { + const drives: { + data: IJSONObject[]; + } = { + data: [], + }; + + const params = { + pageToken: undefined as unknown as string, + }; + + do { + const { data } = await $.http.get(`/v3/users/me/calendarList`, { + params, + }); + params.pageToken = data.nextPageToken; + + if (data.items) { + for (const calendar of data.items) { + drives.data.push({ + value: calendar.id, + name: calendar.summary, + }); + } + } + } while (params.pageToken); + + return drives; + }, +}; diff --git a/packages/backend/src/apps/google-calendar/index.ts b/packages/backend/src/apps/google-calendar/index.ts index 89bb0234..8192820c 100644 --- a/packages/backend/src/apps/google-calendar/index.ts +++ b/packages/backend/src/apps/google-calendar/index.ts @@ -2,6 +2,7 @@ import defineApp from '../../helpers/define-app'; import addAuthHeader from './common/add-auth-header'; import auth from './auth'; import triggers from './triggers'; +import dynamicData from './dynamic-data'; export default defineApp({ name: 'Google Calendar', @@ -15,4 +16,5 @@ export default defineApp({ beforeRequest: [addAuthHeader], auth, triggers, + dynamicData, }); diff --git a/packages/backend/src/apps/google-calendar/triggers/index.ts b/packages/backend/src/apps/google-calendar/triggers/index.ts index c059efef..97a3b6f7 100644 --- a/packages/backend/src/apps/google-calendar/triggers/index.ts +++ b/packages/backend/src/apps/google-calendar/triggers/index.ts @@ -1,3 +1,4 @@ import newCalendar from './new-calendar'; +import newEvent from './new-event'; -export default [newCalendar]; +export default [newCalendar, newEvent]; diff --git a/packages/backend/src/apps/google-calendar/triggers/new-event/index.ts b/packages/backend/src/apps/google-calendar/triggers/new-event/index.ts new file mode 100644 index 00000000..2856cec0 --- /dev/null +++ b/packages/backend/src/apps/google-calendar/triggers/new-event/index.ts @@ -0,0 +1,55 @@ +import defineTrigger from '../../../../helpers/define-trigger'; + +export default defineTrigger({ + name: 'New event', + key: 'newEvent', + pollInterval: 15, + description: 'Triggers when a new event is created.', + arguments: [ + { + label: 'Calendar', + key: 'calendarId', + type: 'dropdown' as const, + required: true, + description: '', + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listCalendars', + }, + ], + }, + }, + ], + + async run($) { + const calendarId = $.step.parameters.calendarId; + + const params: Record = { + pageToken: undefined as unknown as string, + orderBy: 'updated', + }; + + do { + const { data } = await $.http.get(`/v3/calendars/${calendarId}/events`, { + params, + }); + params.pageToken = data.nextPageToken; + + if (data.items?.length) { + for (const event of data.items.reverse()) { + $.pushTriggerItem({ + raw: event, + meta: { + internalId: event.etag, + }, + }); + } + } + } while (params.pageToken); + }, +}); diff --git a/packages/docs/pages/apps/google-calendar/triggers.md b/packages/docs/pages/apps/google-calendar/triggers.md index f05a8175..4dc21a89 100644 --- a/packages/docs/pages/apps/google-calendar/triggers.md +++ b/packages/docs/pages/apps/google-calendar/triggers.md @@ -3,6 +3,8 @@ favicon: /favicons/google-calendar.svg items: - name: New calendar desc: Triggers when a new calendar is created. + - name: New event + desc: Triggers when a new event is created. ---