fix: workflow schedule cleanup (#13295)

This commit is contained in:
Akshay 2025-07-10 12:31:16 +05:30 committed by GitHub
parent 11d04391f9
commit 680040d520
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
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

View file

@ -52,6 +52,11 @@ export class AppsModule extends SubModule {
'services/page.util.service',
]);
const { AppsActionsListener, TemporalService } = await this.getProviders(configs, 'workflows', [
'listeners/app-actions.listener',
'services/temporal.service',
]);
return {
module: AppsModule,
imports: [
@ -74,6 +79,8 @@ export class AppsModule extends SubModule {
VersionRepository,
AppsRepository,
AppGitRepository,
AppsActionsListener,
TemporalService,
PageService,
EventsService,
AppsUtilService,

View file

@ -42,6 +42,7 @@ import { AUDIT_LOGS_REQUEST_CONTEXT_KEY } from '@modules/app/constants';
import { MODULES } from '@modules/app/constants/modules';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { AppGitRepository } from '@modules/app-git/repository';
import { WorkflowSchedule } from '@entities/workflow_schedule.entity';
@Injectable()
export class AppsService implements IAppsService {
@ -60,7 +61,7 @@ export class AppsService implements IAppsService {
protected readonly componentsService: ComponentsService,
protected readonly eventEmitter: EventEmitter2,
protected readonly appGitRepository: AppGitRepository
) { }
) {}
async create(user: User, appCreateDto: AppCreateDto) {
const { name, icon, type, prompt } = appCreateDto;
return await dbTransactionWrap(async (manager: EntityManager) => {
@ -107,12 +108,12 @@ export class AppsService implements IAppsService {
: versionName
? await this.versionRepository.findByName(versionName, app.id)
: // Handle version retrieval based on env
await this.versionRepository.findLatestVersionForEnvironment(
app.id,
envId,
environmentName,
app.organizationId
);
await this.versionRepository.findLatestVersionForEnvironment(
app.id,
envId,
environmentName,
app.organizationId
);
if (!version) {
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 { 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
RequestContext.setLocals(AUDIT_LOGS_REQUEST_CONTEXT_KEY, {

View file

@ -4,8 +4,8 @@ import { OnEvent } from '@nestjs/event-emitter';
@Injectable()
export class AppsActionsListener {
constructor() {}
@OnEvent('beforeAppDelete')
@OnEvent('app.deleted')
async handleAppDeletion(args: { appId: string }) {
throw new Error('Method not implemented');
console.log(`App with ID ${args.appId} has been deleted.`);
}
}