From 4931cbcc34939d2d321de295c5655fcd488acfc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Thu, 30 Mar 2023 15:37:57 +0300 Subject: [PATCH] feat(google-drive): add updated files trigger --- .../src/apps/google-drive/triggers/index.ts | 3 +- .../triggers/updated-files/index.ts | 52 +++++++++++++++++++ .../triggers/updated-files/updated-files.ts | 40 ++++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/google-drive/triggers/updated-files/index.ts create mode 100644 packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.ts diff --git a/packages/backend/src/apps/google-drive/triggers/index.ts b/packages/backend/src/apps/google-drive/triggers/index.ts index 2ef00f43..a6aaf4e2 100644 --- a/packages/backend/src/apps/google-drive/triggers/index.ts +++ b/packages/backend/src/apps/google-drive/triggers/index.ts @@ -1,5 +1,6 @@ import newFiles from './new-files'; import newFilesInFolder from './new-files-in-folder'; import newFolders from './new-folders'; +import updatedFiles from './updated-files'; -export default [newFiles, newFilesInFolder, newFolders]; +export default [newFiles, newFilesInFolder, newFolders, updatedFiles]; diff --git a/packages/backend/src/apps/google-drive/triggers/updated-files/index.ts b/packages/backend/src/apps/google-drive/triggers/updated-files/index.ts new file mode 100644 index 00000000..87f359c2 --- /dev/null +++ b/packages/backend/src/apps/google-drive/triggers/updated-files/index.ts @@ -0,0 +1,52 @@ +import defineTrigger from '../../../../helpers/define-trigger'; +import updatedFiles from './updated-files'; + +export default defineTrigger({ + name: 'Updated Files', + key: 'updatedFiles', + pollInterval: 15, + description: + 'Triggers when a file is updated in a specific folder (but not its subfolder).', + arguments: [ + { + label: 'Folder', + key: 'folderId', + type: 'dropdown' as const, + required: false, + description: + 'Check a specific folder for updated files. Please note: files located in subfolders of the folder you choose here will NOT trigger this flow. Defaults to the top-level folder if none is picked.', + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listFolders', + }, + ], + }, + }, + { + label: 'Include Deleted', + key: 'includeDeleted', + type: 'dropdown' as const, + required: true, + value: true, + description: 'Should this trigger also on files that are deleted?', + options: [ + { + label: 'Yes', + value: true, + }, + { + label: 'No', + value: false, + }, + ], + }, + ], + + async run($) { + await updatedFiles($); + }, +}); diff --git a/packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.ts b/packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.ts new file mode 100644 index 00000000..37456b6d --- /dev/null +++ b/packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.ts @@ -0,0 +1,40 @@ +import { IGlobalVariable } from '@automatisch/types'; + +const updatedFiles = async ($: IGlobalVariable) => { + let q = `mimeType!='application/vnd.google-apps.folder'`; + if ($.step.parameters.includeDeleted === false) { + q += ` and trashed=${$.step.parameters.includeDeleted}`; + } + + if ($.step.parameters.folderId) { + q += ` and '${$.step.parameters.folderId}' in parents`; + } else { + q += ` and parents in 'root'`; + } + + const params = { + pageToken: undefined as unknown as string, + orderBy: 'modifiedTime desc', + fields: '*', + pageSize: 1000, + q, + }; + + do { + const { data } = await $.http.get(`/v3/files`, { params }); + params.pageToken = data.nextPageToken; + + if (data.files?.length) { + for (const file of data.files) { + $.pushTriggerItem({ + raw: file, + meta: { + internalId: `${file.id}-${file.modifiedTime}`, + }, + }); + } + } + } while (params.pageToken); +}; + +export default updatedFiles;