From dfa7d4cb8dee607a665f0a0a1fc9a067b22b2f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Tue, 28 Nov 2023 16:58:06 +0300 Subject: [PATCH] feat(notion): add updated database items trigger --- .../backend/src/apps/notion/triggers/index.ts | 3 +- .../triggers/updated-database-items/index.ts | 33 ++++++++++++ .../updated-database-items.ts | 51 +++++++++++++++++++ packages/docs/pages/apps/notion/triggers.md | 2 + 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/notion/triggers/updated-database-items/index.ts create mode 100644 packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.ts diff --git a/packages/backend/src/apps/notion/triggers/index.ts b/packages/backend/src/apps/notion/triggers/index.ts index 260f1756..0914477b 100644 --- a/packages/backend/src/apps/notion/triggers/index.ts +++ b/packages/backend/src/apps/notion/triggers/index.ts @@ -1,3 +1,4 @@ import newDatabaseItems from './new-database-items'; +import updatedDatabaseItems from './updated-database-items'; -export default [newDatabaseItems]; +export default [newDatabaseItems, updatedDatabaseItems]; diff --git a/packages/backend/src/apps/notion/triggers/updated-database-items/index.ts b/packages/backend/src/apps/notion/triggers/updated-database-items/index.ts new file mode 100644 index 00000000..82c493a3 --- /dev/null +++ b/packages/backend/src/apps/notion/triggers/updated-database-items/index.ts @@ -0,0 +1,33 @@ +import defineTrigger from '../../../../helpers/define-trigger'; +import updatedDatabaseItems from './updated-database-items'; + +export default defineTrigger({ + name: 'Updated database items', + key: 'updatedDatabaseItems', + pollInterval: 15, + description: + 'Triggers when there is an update to an item in a chosen database', + arguments: [ + { + label: 'Database', + key: 'databaseId', + type: 'dropdown' as const, + required: false, + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listDatabases', + }, + ], + }, + }, + ], + + async run($) { + await updatedDatabaseItems($); + }, +}); diff --git a/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.ts b/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.ts new file mode 100644 index 00000000..d63f2f11 --- /dev/null +++ b/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.ts @@ -0,0 +1,51 @@ +import { IGlobalVariable } from '@automatisch/types'; + +type DatabaseItem = { + id: string; + last_edited_time: string; +}; + +type ResponseData = { + results: DatabaseItem[]; + next_cursor?: string; +}; + +type Payload = { + sorts: [ + { + timestamp: 'created_time' | 'last_edited_time'; + direction: 'ascending' | 'descending'; + } + ]; + start_cursor?: string; +}; + +const updatedDatabaseItems = async ($: IGlobalVariable) => { + const payload: Payload = { + sorts: [ + { + timestamp: 'last_edited_time', + direction: 'descending', + }, + ], + }; + + const databaseId = $.step.parameters.databaseId as string; + const path = `/v1/databases/${databaseId}/query`; + do { + const response = await $.http.post(path, payload); + + payload.start_cursor = response.data.next_cursor; + + for (const databaseItem of response.data.results) { + $.pushTriggerItem({ + raw: databaseItem, + meta: { + internalId: `${databaseItem.id}-${databaseItem.last_edited_time}`, + }, + }); + } + } while (payload.start_cursor); +}; + +export default updatedDatabaseItems; diff --git a/packages/docs/pages/apps/notion/triggers.md b/packages/docs/pages/apps/notion/triggers.md index 91e33a0b..5d687974 100644 --- a/packages/docs/pages/apps/notion/triggers.md +++ b/packages/docs/pages/apps/notion/triggers.md @@ -3,6 +3,8 @@ favicon: /favicons/notion.svg items: - name: New database items desc: Triggers when a new database item is created. + - name: Updated database items + desc: Triggers when there is an update to an item in a chosen database. ---