From 5e264d45bb630fa90be64afef7e86ed3ebc3283f Mon Sep 17 00:00:00 2001 From: johnsoncherian Date: Wed, 16 Jul 2025 02:59:04 +0530 Subject: [PATCH] fix: separate update and fetch operations in clonePage method The clonePage method was experiencing transaction isolation issues where findPagesForVersion would not return newly created components. This was caused by performing both update operations and fetch operations within the same dbTransactionForAppVersionAssociationsUpdate transaction. Changes: - Move page cloning and component creation inside transaction - Move page/event fetching outside transaction after commit - Ensure newly created components are visible in subsequent queries --- server/src/modules/apps/services/page.service.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/server/src/modules/apps/services/page.service.ts b/server/src/modules/apps/services/page.service.ts index 00071abe81..955c1901d7 100644 --- a/server/src/modules/apps/services/page.service.ts +++ b/server/src/modules/apps/services/page.service.ts @@ -57,7 +57,7 @@ export class PageService implements IPageService { async clonePage(pageId: string, appVersionId: string, organizationId: string) { // TODO - Should use manager here - multiple db operations found - return dbTransactionForAppVersionAssociationsUpdate(async (manager) => { + await dbTransactionForAppVersionAssociationsUpdate(async (manager) => { const pageToClone = await manager.findOne(Page, { where: { id: pageId, appVersionId }, }); @@ -91,12 +91,13 @@ export class PageService implements IPageService { const clonedpage = await manager.save(newPage); await this.clonePageEventsAndComponents(pageId, clonedpage.id, manager); - - const pages = await this.findPagesForVersion(appVersionId, organizationId, '', manager); - const events = await this.eventHandlerService.findEventsForVersion(appVersionId, manager); - - return { pages, events }; }, appVersionId); + + // Fetch pages and events separately after transaction completes + const pages = await this.findPagesForVersion(appVersionId, organizationId, ''); + const events = await this.eventHandlerService.findEventsForVersion(appVersionId); + + return { pages, events }; } async cloneGroup(groupPageId: string, appVersionId: string, organizationId) {