From da5ca9227eecd3a809dc560401d795c6084fbf9d Mon Sep 17 00:00:00 2001 From: AbleKSaju <126228406+AbleKSaju@users.noreply.github.com> Date: Sat, 17 May 2025 13:00:39 +0530 Subject: [PATCH] feat: add worker for cron job and trigger frontend action to sync data with ERPNext --- jobs/triggerErpNextSync.ts | 7 +++++++ main/initSheduler.ts | 38 ++++++++++++++++++++++++++++++++++++++ tsconfig.json | 3 ++- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 jobs/triggerErpNextSync.ts create mode 100644 main/initSheduler.ts diff --git a/jobs/triggerErpNextSync.ts b/jobs/triggerErpNextSync.ts new file mode 100644 index 00000000..4af649b0 --- /dev/null +++ b/jobs/triggerErpNextSync.ts @@ -0,0 +1,7 @@ +// eslint-disable-next-line +const { parentPort } = require('worker_threads'); + +if (parentPort) { + // eslint-disable-next-line + parentPort.postMessage({ type: 'trigger-frontend-action' }); +} diff --git a/main/initSheduler.ts b/main/initSheduler.ts new file mode 100644 index 00000000..1a4d4711 --- /dev/null +++ b/main/initSheduler.ts @@ -0,0 +1,38 @@ +import Bree from 'bree'; +import path from 'path'; +import main from 'main'; + +let bree: Bree; + +export async function initScheduler(interval: string) { + const jobsRoot = path.join(__dirname, '..', '..', 'jobs'); + + if (bree) { + await bree.stop(); + } + + bree = new Bree({ + root: jobsRoot, + defaultExtension: 'ts', + jobs: [ + { + name: 'triggerErpNextSync', + interval: interval, + worker: { + workerData: { + useTsNode: true, + }, + }, + }, + ], + worker: { + argv: ['--require', 'ts-node/register'], + }, + }); + + bree.on('worker created', () => { + main.mainWindow?.webContents.send('trigger-frontend-action'); + }); + + await bree.start(); +} diff --git a/tsconfig.json b/tsconfig.json index 8f6703eb..30d26b24 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -48,7 +48,8 @@ "reports/**/*.ts", "utils/**/*.ts", "tests/**/*.ts", - "dummy/**/*.ts" + "dummy/**/*.ts", + "jobs/**/*.ts" ], "exclude": ["node_modules"] }