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
This commit is contained in:
johnsoncherian 2025-07-16 02:59:04 +05:30
parent 05785ca19d
commit 5e264d45bb

View file

@ -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) {