From 9e44e78b9d7b6c672353a336aaafc3692e817bd7 Mon Sep 17 00:00:00 2001 From: botmaster Date: Fri, 9 Feb 2024 15:23:10 +0100 Subject: [PATCH] refactor: Create Notion client singleton --- server/NotionClient.ts | 22 ++++++++++++++++++++++ server/api/notion-database-info.get.ts | 7 ++----- server/api/notion-page-image.post.ts | 6 ++---- server/api/notion-page-list.post.ts | 6 ++---- 4 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 server/NotionClient.ts diff --git a/server/NotionClient.ts b/server/NotionClient.ts new file mode 100644 index 0000000..12c7fa8 --- /dev/null +++ b/server/NotionClient.ts @@ -0,0 +1,22 @@ +import { Client } from '@notionhq/client'; + +export class NotionClient { + private static instance: NotionClient; + private readonly client: Client; + + private constructor() { + const config = useRuntimeConfig(); + this.client = new Client({ auth: config.notionApiKey }); + } + + public static getInstance(): NotionClient { + if (!NotionClient.instance) + NotionClient.instance = new NotionClient(); + + return NotionClient.instance; + } + + public getClient() { + return this.client; + } +} diff --git a/server/api/notion-database-info.get.ts b/server/api/notion-database-info.get.ts index 66e9c55..48cda37 100644 --- a/server/api/notion-database-info.get.ts +++ b/server/api/notion-database-info.get.ts @@ -1,10 +1,7 @@ -import { Client } from '@notionhq/client'; - -// Get the runtime config -const config = useRuntimeConfig(); +import { NotionClient } from '~/server/NotionClient'; // Initialize Notion Client -const notion = new Client({ auth: config.notionApiKey }); +const notion = NotionClient.getInstance().getClient(); export default defineEventHandler(async (event) => { // Get Query diff --git a/server/api/notion-page-image.post.ts b/server/api/notion-page-image.post.ts index dd82a6f..078ef32 100644 --- a/server/api/notion-page-image.post.ts +++ b/server/api/notion-page-image.post.ts @@ -1,9 +1,7 @@ -import { Client } from '@notionhq/client'; - -const config = useRuntimeConfig(); +import { NotionClient } from '~/server/NotionClient'; // Initialize Notion Client -const notion = new Client({ auth: config.notionApiKey }); +const notion = NotionClient.getInstance().getClient(); // Cache the image url const imageUrlCache = new Map(); diff --git a/server/api/notion-page-list.post.ts b/server/api/notion-page-list.post.ts index 26392c9..6ac3ede 100644 --- a/server/api/notion-page-list.post.ts +++ b/server/api/notion-page-list.post.ts @@ -1,4 +1,4 @@ -import { Client } from '@notionhq/client'; +import { NotionClient } from '~/server/NotionClient'; export interface INotionArticle { title: string @@ -16,10 +16,8 @@ export interface INotionArticle { } } -const config = useRuntimeConfig(); - // Initialize Notion Client -const notion = new Client({ auth: config.notionApiKey }); +const notion = NotionClient.getInstance().getClient(); // Define the event handler export default defineEventHandler(async (event) => {