mirror of
https://github.com/ToolJet/ToolJet
synced 2026-05-24 09:28:31 +00:00
fix: workflow schedule cleanup (#13295)
This commit is contained in:
parent
11d04391f9
commit
680040d520
5 changed files with 37 additions and 12 deletions
|
|
@ -1 +1 @@
|
||||||
Subproject commit c955741e5a120cd61651eaf14aef0d5c67059cb0
|
Subproject commit aed7af0149525ff745650c21ee40bf9caf2892dc
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 1754d14f2fc5dee8616f09f13e63b3569e42f3ee
|
Subproject commit 8c0e6dec37f1b0bb7fb5552d8eef4db3ddc18b31
|
||||||
|
|
@ -52,6 +52,11 @@ export class AppsModule extends SubModule {
|
||||||
'services/page.util.service',
|
'services/page.util.service',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const { AppsActionsListener, TemporalService } = await this.getProviders(configs, 'workflows', [
|
||||||
|
'listeners/app-actions.listener',
|
||||||
|
'services/temporal.service',
|
||||||
|
]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
module: AppsModule,
|
module: AppsModule,
|
||||||
imports: [
|
imports: [
|
||||||
|
|
@ -74,6 +79,8 @@ export class AppsModule extends SubModule {
|
||||||
VersionRepository,
|
VersionRepository,
|
||||||
AppsRepository,
|
AppsRepository,
|
||||||
AppGitRepository,
|
AppGitRepository,
|
||||||
|
AppsActionsListener,
|
||||||
|
TemporalService,
|
||||||
PageService,
|
PageService,
|
||||||
EventsService,
|
EventsService,
|
||||||
AppsUtilService,
|
AppsUtilService,
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ import { AUDIT_LOGS_REQUEST_CONTEXT_KEY } from '@modules/app/constants';
|
||||||
import { MODULES } from '@modules/app/constants/modules';
|
import { MODULES } from '@modules/app/constants/modules';
|
||||||
import { EventEmitter2 } from '@nestjs/event-emitter';
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
||||||
import { AppGitRepository } from '@modules/app-git/repository';
|
import { AppGitRepository } from '@modules/app-git/repository';
|
||||||
|
import { WorkflowSchedule } from '@entities/workflow_schedule.entity';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AppsService implements IAppsService {
|
export class AppsService implements IAppsService {
|
||||||
|
|
@ -60,7 +61,7 @@ export class AppsService implements IAppsService {
|
||||||
protected readonly componentsService: ComponentsService,
|
protected readonly componentsService: ComponentsService,
|
||||||
protected readonly eventEmitter: EventEmitter2,
|
protected readonly eventEmitter: EventEmitter2,
|
||||||
protected readonly appGitRepository: AppGitRepository
|
protected readonly appGitRepository: AppGitRepository
|
||||||
) { }
|
) {}
|
||||||
async create(user: User, appCreateDto: AppCreateDto) {
|
async create(user: User, appCreateDto: AppCreateDto) {
|
||||||
const { name, icon, type, prompt } = appCreateDto;
|
const { name, icon, type, prompt } = appCreateDto;
|
||||||
return await dbTransactionWrap(async (manager: EntityManager) => {
|
return await dbTransactionWrap(async (manager: EntityManager) => {
|
||||||
|
|
@ -107,12 +108,12 @@ export class AppsService implements IAppsService {
|
||||||
: versionName
|
: versionName
|
||||||
? await this.versionRepository.findByName(versionName, app.id)
|
? await this.versionRepository.findByName(versionName, app.id)
|
||||||
: // Handle version retrieval based on env
|
: // Handle version retrieval based on env
|
||||||
await this.versionRepository.findLatestVersionForEnvironment(
|
await this.versionRepository.findLatestVersionForEnvironment(
|
||||||
app.id,
|
app.id,
|
||||||
envId,
|
envId,
|
||||||
environmentName,
|
environmentName,
|
||||||
app.organizationId
|
app.organizationId
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!version) {
|
if (!version) {
|
||||||
throw new NotFoundException("Couldn't found app version. Please check the version name");
|
throw new NotFoundException("Couldn't found app version. Please check the version name");
|
||||||
|
|
@ -181,7 +182,24 @@ export class AppsService implements IAppsService {
|
||||||
const { organizationId } = user;
|
const { organizationId } = user;
|
||||||
const { id } = app;
|
const { id } = app;
|
||||||
|
|
||||||
await this.appRepository.delete({ id, organizationId });
|
await dbTransactionWrap(async (manager: EntityManager) => {
|
||||||
|
const schedules = await manager
|
||||||
|
.createQueryBuilder(WorkflowSchedule, 'workflowSchedule')
|
||||||
|
.innerJoinAndSelect('workflowSchedule.workflow', 'appVersion')
|
||||||
|
.where('appVersion.appId = :appId', { appId: id })
|
||||||
|
.getMany();
|
||||||
|
|
||||||
|
// Emit event with schedule IDs for temporal schedule cleanup
|
||||||
|
if (schedules.length > 0) {
|
||||||
|
const scheduleIds = schedules.map((schedule) => schedule.id);
|
||||||
|
this.eventEmitter.emit('app.deleted', {
|
||||||
|
appId: id,
|
||||||
|
scheduleIds: scheduleIds,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await manager.delete(App, { id, organizationId });
|
||||||
|
});
|
||||||
|
|
||||||
//APP_DELETE audit
|
//APP_DELETE audit
|
||||||
RequestContext.setLocals(AUDIT_LOGS_REQUEST_CONTEXT_KEY, {
|
RequestContext.setLocals(AUDIT_LOGS_REQUEST_CONTEXT_KEY, {
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@ import { OnEvent } from '@nestjs/event-emitter';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AppsActionsListener {
|
export class AppsActionsListener {
|
||||||
constructor() {}
|
constructor() {}
|
||||||
@OnEvent('beforeAppDelete')
|
@OnEvent('app.deleted')
|
||||||
async handleAppDeletion(args: { appId: string }) {
|
async handleAppDeletion(args: { appId: string }) {
|
||||||
throw new Error('Method not implemented');
|
console.log(`App with ID ${args.appId} has been deleted.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue