From 37e4524156dd4db4ca563fc1a42fc7bdc0b05227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Thu, 27 Jul 2023 14:23:38 +0300 Subject: [PATCH] feat(notion): add find database item action --- .../actions/create-database-item/index.ts | 2 +- .../actions/find-database-item/index.ts | 70 +++++++++++++++++++ .../backend/src/apps/notion/actions/index.ts | 3 +- packages/docs/pages/apps/notion/actions.md | 2 + 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 packages/backend/src/apps/notion/actions/find-database-item/index.ts diff --git a/packages/backend/src/apps/notion/actions/create-database-item/index.ts b/packages/backend/src/apps/notion/actions/create-database-item/index.ts index 43111a9b..334bc511 100644 --- a/packages/backend/src/apps/notion/actions/create-database-item/index.ts +++ b/packages/backend/src/apps/notion/actions/create-database-item/index.ts @@ -8,7 +8,7 @@ type TBody = { }; export default defineAction({ - name: 'Create Database Item', + name: 'Create database item', key: 'createDatabaseItem', description: 'Creates an item in a database.', arguments: [ diff --git a/packages/backend/src/apps/notion/actions/find-database-item/index.ts b/packages/backend/src/apps/notion/actions/find-database-item/index.ts new file mode 100644 index 00000000..fbd2c056 --- /dev/null +++ b/packages/backend/src/apps/notion/actions/find-database-item/index.ts @@ -0,0 +1,70 @@ +import { IJSONArray, IJSONObject } from '@automatisch/types'; +import defineAction from '../../../../helpers/define-action'; + +type TBody = { + filter: IJSONObject; + sorts: IJSONArray; +}; + +export default defineAction({ + name: 'Find database item', + key: 'findDatabaseItem', + description: 'Searches for an item in a database by property.', + arguments: [ + { + label: 'Database', + key: 'databaseId', + type: 'dropdown' as const, + required: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listDatabases', + }, + ], + }, + }, + { + label: 'Name', + key: 'name', + type: 'string' as const, + required: false, + description: + 'This field has a 2000 character limit. Any characters beyond 2000 will not be included.', + variables: true, + }, + ], + + async run($) { + const databaseId = $.step.parameters.databaseId as string; + const name = $.step.parameters.name as string; + const truncatedName = name.slice(0, 2000); + + const body: TBody = { + filter: { + property: 'Name', + rich_text: { + equals: truncatedName, + }, + }, + sorts: [ + { + timestamp: 'last_edited_time', + direction: 'descending', + }, + ], + }; + + const { data } = await $.http.post( + `/v1/databases/${databaseId}/query`, + body + ); + + $.setActionItem({ + raw: data.results[0], + }); + }, +}); diff --git a/packages/backend/src/apps/notion/actions/index.ts b/packages/backend/src/apps/notion/actions/index.ts index 7d929160..00f0bed3 100644 --- a/packages/backend/src/apps/notion/actions/index.ts +++ b/packages/backend/src/apps/notion/actions/index.ts @@ -1,4 +1,5 @@ import createDatabaseItem from './create-database-item'; import createPage from './create-page'; +import findDatabaseItem from './find-database-item'; -export default [createDatabaseItem, createPage]; +export default [createDatabaseItem, createPage, findDatabaseItem]; diff --git a/packages/docs/pages/apps/notion/actions.md b/packages/docs/pages/apps/notion/actions.md index 312c5d41..d168016d 100644 --- a/packages/docs/pages/apps/notion/actions.md +++ b/packages/docs/pages/apps/notion/actions.md @@ -5,6 +5,8 @@ items: desc: Creates an item in a database. - name: Create page desc: Creates a page inside a parent page. + - name: Find database item + desc: Searches for an item in a database by property. ---