From 64f7560b3b3d1dca63f75facbc65e88ee0c5db27 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Thu, 2 Mar 2023 15:26:20 +0000 Subject: [PATCH] feat: add delete user worker --- packages/backend/src/worker.ts | 1 + .../backend/src/workers/delete-user.ee.ts | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 packages/backend/src/workers/delete-user.ee.ts diff --git a/packages/backend/src/worker.ts b/packages/backend/src/worker.ts index 8a5cb447..9e0d5646 100644 --- a/packages/backend/src/worker.ts +++ b/packages/backend/src/worker.ts @@ -4,6 +4,7 @@ import './workers/flow'; import './workers/trigger'; import './workers/action'; import './workers/email'; +import './workers/delete-user.ee'; import telemetry from './helpers/telemetry'; telemetry.setServiceType('worker'); diff --git a/packages/backend/src/workers/delete-user.ee.ts b/packages/backend/src/workers/delete-user.ee.ts new file mode 100644 index 00000000..887149a2 --- /dev/null +++ b/packages/backend/src/workers/delete-user.ee.ts @@ -0,0 +1,44 @@ +import { Worker } from 'bullmq'; +import redisConfig from '../config/redis'; +import logger from '../helpers/logger'; +import User from '../models/user'; +import Execution from '../models/execution'; +import ExecutionStep from '../models/execution-step'; + +export const worker = new Worker( + 'delete-user', + async (job) => { + const { id } = job.data; + + const user = await User.query().findById(id).throwIfNotFound(); + + const executionIds = ( + await user.$relatedQuery('executions').select('executions.id') + ).map((execution: Execution) => execution.id); + + await ExecutionStep.query().hardDelete().whereIn('execution_id', executionIds); + await user.$relatedQuery('executions').hardDelete(); + await user.$relatedQuery('steps').hardDelete(); + await user.$relatedQuery('flows').hardDelete(); + await user.$relatedQuery('connections').hardDelete(); + + await user.$query().hardDelete(); + }, + { connection: redisConfig } +); + +worker.on('completed', (job) => { + logger.info( + `JOB ID: ${job.id} - The user with the ID of '${job.data.id}' has been deleted!` + ); +}); + +worker.on('failed', (job, err) => { + logger.info( + `JOB ID: ${job.id} - The user with the ID of '${job.data.id}' has failed to be deleted! ${err.message}` + ); +}); + +process.on('SIGTERM', async () => { + await worker.close(); +});