diff --git a/src/controllers/OrganizationController.ts b/src/controllers/OrganizationController.ts index 7a4eb03e..9f1e1615 100644 --- a/src/controllers/OrganizationController.ts +++ b/src/controllers/OrganizationController.ts @@ -7938,7 +7938,7 @@ export class OrganizationController extends Controller { ancestorDNA: rootDnaId, orgRevisionId: drafRevisionId, }, - select: ["id"], + // select: ["id"], }), this.orgRootRepository.findOne({ where: { @@ -7981,16 +7981,32 @@ export class OrganizationController extends Controller { // Process from top (Root) to bottom (Child4) to handle foreign key constraints // OrgRoot (sync first - no parent dependencies) - const orgRootResult = await this.syncOrgLevel( - queryRunner, - OrgRoot, - this.orgRootRepository, - drafRevisionId, - currentRevisionId, - allMappings, - orgRootDraft?.id, - orgRootCurrent?.id, - ); + // If we manually created orgRootCurrent, skip syncOrgLevel and set up mapping directly + // to avoid double insert (syncOrgLevel would try to insert again because IDs don't match) + let orgRootResult: { mapping: OrgIdMapping; counts: { deleted: number; updated: number; inserted: number } }; + if (orgRootCurrent && orgRootDraft && orgRootCurrent.ancestorDNA === orgRootDraft.ancestorDNA) { + // Manually created - set up mapping directly + const rootMapping: OrgIdMapping = { + byAncestorDNA: new Map([[orgRootDraft.ancestorDNA, orgRootCurrent.id]]), + byDraftId: new Map([[orgRootDraft.id, orgRootCurrent.id]]), + }; + orgRootResult = { + mapping: rootMapping, + counts: { deleted: 0, updated: 0, inserted: 1 }, // Count as insert since we created it + }; + } else { + // Not manually created - use normal syncOrgLevel flow + orgRootResult = await this.syncOrgLevel( + queryRunner, + OrgRoot, + this.orgRootRepository, + drafRevisionId, + currentRevisionId, + allMappings, + orgRootDraft?.id, + orgRootCurrent?.id, + ); + } allMappings.orgRoot = orgRootResult.mapping; orgSyncStats.orgRoot = orgRootResult.counts;