mirror of
https://github.com/ToolJet/ToolJet
synced 2026-05-24 09:28:31 +00:00
fix: deleting events associated with pages on page delete
This commit is contained in:
parent
72297e6f07
commit
28d46b9f80
3 changed files with 38 additions and 17 deletions
|
|
@ -15,6 +15,7 @@ import { App } from 'src/entities/app.entity';
|
|||
import { AppEnvironmentService } from './app_environments.service';
|
||||
import { dbTransactionWrap } from 'src/helpers/utils.helper';
|
||||
import { DataSourceScopes } from 'src/helpers/data_source.constants';
|
||||
import { EventHandler } from 'src/entities/event_handler.entity';
|
||||
|
||||
@Injectable()
|
||||
export class DataQueriesService {
|
||||
|
|
@ -74,9 +75,21 @@ export class DataQueriesService {
|
|||
}
|
||||
|
||||
async delete(dataQueryId: string) {
|
||||
await this.deleteDataQueryEvents(dataQueryId);
|
||||
|
||||
return await this.dataQueriesRepository.delete(dataQueryId);
|
||||
}
|
||||
|
||||
async deleteDataQueryEvents(dataQueryId: string) {
|
||||
return await dbTransactionWrap(async (manager: EntityManager) => {
|
||||
const allEvents = await manager.find(EventHandler, {
|
||||
where: { sourceId: dataQueryId },
|
||||
});
|
||||
|
||||
return await manager.remove(allEvents);
|
||||
});
|
||||
}
|
||||
|
||||
async update(dataQueryId: string, name: string, options: object): Promise<DataQuery> {
|
||||
const dataQuery = this.dataQueriesRepository.save({
|
||||
id: dataQueryId,
|
||||
|
|
|
|||
|
|
@ -37,8 +37,7 @@ export class EventsService {
|
|||
where: { sourceId },
|
||||
});
|
||||
|
||||
await manager.remove(allEvents);
|
||||
return allEvents;
|
||||
return await manager.remove(allEvents);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import { ComponentsService } from './components.service';
|
|||
import { CreatePageDto, UpdatePageDto } from '@dto/pages.dto';
|
||||
import { AppsService } from './apps.service';
|
||||
import { dbTransactionWrap } from 'src/helpers/utils.helper';
|
||||
import { EventsService } from './events_handler.service';
|
||||
|
||||
@Injectable()
|
||||
export class PageService {
|
||||
|
|
@ -15,6 +16,7 @@ export class PageService {
|
|||
private readonly pageRepository: Repository<Page>,
|
||||
|
||||
private componentsService: ComponentsService,
|
||||
private eventHandlerService: EventsService,
|
||||
private appService: AppsService
|
||||
) {}
|
||||
|
||||
|
|
@ -76,28 +78,35 @@ export class PageService {
|
|||
}
|
||||
|
||||
async deletePage(pageId: string, appVersionId: string) {
|
||||
const pageExists = await this.pageRepository.findOne(pageId);
|
||||
const { editingVersion } = await this.appService.findAppFromVersion(appVersionId);
|
||||
return dbTransactionWrap(async (manager: EntityManager) => {
|
||||
const pageExists = await manager.findOne(Page, pageId);
|
||||
|
||||
if (!pageExists) {
|
||||
throw new Error('Page not found');
|
||||
}
|
||||
if (!pageExists) {
|
||||
throw new Error('Page not found');
|
||||
}
|
||||
|
||||
if (editingVersion?.homePageId === pageId) {
|
||||
throw new Error('Cannot delete home page');
|
||||
}
|
||||
const pageDeletedIndex = pageExists.index;
|
||||
const pageDeleted = await this.pageRepository.delete(pageId);
|
||||
if (editingVersion?.homePageId === pageId) {
|
||||
throw new Error('Cannot delete home page');
|
||||
}
|
||||
this.eventHandlerService.cascadeDeleteEvents(pageExists.id);
|
||||
const pageDeletedIndex = pageExists.index;
|
||||
const pageDeleted = await this.pageRepository.delete(pageId);
|
||||
|
||||
if (pageDeleted.affected === 0) {
|
||||
throw new Error('Page not deleted');
|
||||
}
|
||||
if (pageDeleted.affected === 0) {
|
||||
throw new Error('Page not deleted');
|
||||
}
|
||||
|
||||
const pages = await this.pageRepository.find({ appVersionId: pageExists.appVersionId });
|
||||
const pages = await this.pageRepository.find({ appVersionId: pageExists.appVersionId });
|
||||
|
||||
const rearrangedPages = this.rearrangePagesOnDelete(pages, pageDeletedIndex);
|
||||
const rearrangedPages = this.rearrangePagesOnDelete(pages, pageDeletedIndex);
|
||||
|
||||
await this.pageRepository.save(rearrangedPages);
|
||||
return await Promise.all(
|
||||
rearrangedPages.map(async (page) => {
|
||||
await manager.update(Page, page.id, page);
|
||||
})
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
rearrangePagesOnDelete(pages: Page[], pageDeletedIndex: number) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue