fix: use withSoftDeleted scope to remove user associations permanently (#1239)
This commit is contained in:
@@ -5,6 +5,7 @@ import flowQueue from '../../queues/flow';
|
|||||||
import Flow from '../../models/flow';
|
import Flow from '../../models/flow';
|
||||||
import Execution from '../../models/execution';
|
import Execution from '../../models/execution';
|
||||||
import ExecutionStep from '../../models/execution-step';
|
import ExecutionStep from '../../models/execution-step';
|
||||||
|
import appConfig from '../../config/app';
|
||||||
|
|
||||||
const deleteCurrentUser = async (
|
const deleteCurrentUser = async (
|
||||||
_parent: unknown,
|
_parent: unknown,
|
||||||
@@ -14,7 +15,7 @@ const deleteCurrentUser = async (
|
|||||||
const id = context.currentUser.id;
|
const id = context.currentUser.id;
|
||||||
|
|
||||||
const flows = await context.currentUser.$relatedQuery('flows').where({
|
const flows = await context.currentUser.$relatedQuery('flows').where({
|
||||||
status: 'active',
|
active: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
const repeatableJobs = await flowQueue.getRepeatableJobs();
|
const repeatableJobs = await flowQueue.getRepeatableJobs();
|
||||||
@@ -39,6 +40,12 @@ const deleteCurrentUser = async (
|
|||||||
await context.currentUser.$relatedQuery('steps').delete();
|
await context.currentUser.$relatedQuery('steps').delete();
|
||||||
await Flow.query().whereIn('id', flowIds).delete();
|
await Flow.query().whereIn('id', flowIds).delete();
|
||||||
await context.currentUser.$relatedQuery('connections').delete();
|
await context.currentUser.$relatedQuery('connections').delete();
|
||||||
|
await context.currentUser.$relatedQuery('identities').delete();
|
||||||
|
|
||||||
|
if (appConfig.isCloud) {
|
||||||
|
await context.currentUser.$relatedQuery('subscriptions').delete();
|
||||||
|
await context.currentUser.$relatedQuery('usageData').delete();
|
||||||
|
}
|
||||||
|
|
||||||
await context.currentUser.$query().delete();
|
await context.currentUser.$query().delete();
|
||||||
|
|
||||||
|
@@ -3,6 +3,7 @@ import { Worker } from 'bullmq';
|
|||||||
import * as Sentry from '../helpers/sentry.ee';
|
import * as Sentry from '../helpers/sentry.ee';
|
||||||
import redisConfig from '../config/redis';
|
import redisConfig from '../config/redis';
|
||||||
import logger from '../helpers/logger';
|
import logger from '../helpers/logger';
|
||||||
|
import appConfig from '../config/app';
|
||||||
import User from '../models/user';
|
import User from '../models/user';
|
||||||
import Execution from '../models/execution';
|
import Execution from '../models/execution';
|
||||||
import ExecutionStep from '../models/execution-step';
|
import ExecutionStep from '../models/execution-step';
|
||||||
@@ -12,21 +13,34 @@ export const worker = new Worker(
|
|||||||
async (job) => {
|
async (job) => {
|
||||||
const { id } = job.data;
|
const { id } = job.data;
|
||||||
|
|
||||||
const user = await User.query().findById(id).throwIfNotFound();
|
const user = await User.query()
|
||||||
|
.withSoftDeleted()
|
||||||
|
.findById(id)
|
||||||
|
.throwIfNotFound();
|
||||||
|
|
||||||
const executionIds = (
|
const executionIds = (
|
||||||
await user.$relatedQuery('executions').select('executions.id')
|
await user
|
||||||
|
.$relatedQuery('executions')
|
||||||
|
.withSoftDeleted()
|
||||||
|
.select('executions.id')
|
||||||
).map((execution: Execution) => execution.id);
|
).map((execution: Execution) => execution.id);
|
||||||
|
|
||||||
await ExecutionStep.query()
|
await ExecutionStep.query()
|
||||||
.hardDelete()
|
.withSoftDeleted()
|
||||||
.whereIn('execution_id', executionIds);
|
.whereIn('execution_id', executionIds)
|
||||||
await user.$relatedQuery('executions').hardDelete();
|
.hardDelete();
|
||||||
await user.$relatedQuery('steps').hardDelete();
|
await user.$relatedQuery('executions').withSoftDeleted().hardDelete();
|
||||||
await user.$relatedQuery('flows').hardDelete();
|
await user.$relatedQuery('steps').withSoftDeleted().hardDelete();
|
||||||
await user.$relatedQuery('connections').hardDelete();
|
await user.$relatedQuery('flows').withSoftDeleted().hardDelete();
|
||||||
|
await user.$relatedQuery('connections').withSoftDeleted().hardDelete();
|
||||||
|
await user.$relatedQuery('identities').withSoftDeleted().hardDelete();
|
||||||
|
|
||||||
await user.$query().hardDelete();
|
if (appConfig.isCloud) {
|
||||||
|
await user.$relatedQuery('subscriptions').withSoftDeleted().hardDelete();
|
||||||
|
await user.$relatedQuery('usageData').withSoftDeleted().hardDelete();
|
||||||
|
}
|
||||||
|
|
||||||
|
await user.$query().withSoftDeleted().hardDelete();
|
||||||
},
|
},
|
||||||
{ connection: redisConfig }
|
{ connection: redisConfig }
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user