From 49e1e2f19ef8d5441e3fef509e15b9ab50173df5 Mon Sep 17 00:00:00 2001 From: Hong Jiarong Date: Thu, 30 Jul 2026 13:20:24 +0800 Subject: [PATCH] fix(hub): cascade agent-config folder parent deletes parentId RESTRICT prevented Organization.deleteMany from clearing nested folder trees during test resetDb, leaving half-wiped rows and breaking subsequent upserts. Service still refuses non-empty folder deletes; DB cascade only unblocks org teardown / full wipe. --- .../20260719140000_agent_config_folder_tree/migration.sql | 2 +- .../migration.sql | 5 +++++ hub/prisma/schema.prisma | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 hub/prisma/migrations/20260730120000_agent_config_folder_parent_cascade/migration.sql diff --git a/hub/prisma/migrations/20260719140000_agent_config_folder_tree/migration.sql b/hub/prisma/migrations/20260719140000_agent_config_folder_tree/migration.sql index 9f8f1af..b6a05d3 100644 --- a/hub/prisma/migrations/20260719140000_agent_config_folder_tree/migration.sql +++ b/hub/prisma/migrations/20260719140000_agent_config_folder_tree/migration.sql @@ -28,6 +28,6 @@ CREATE INDEX "OrganizationAgentRole_organizationId_folderId_idx" ON "Organizatio -- AddForeignKey ALTER TABLE "OrganizationAgentConfigFolder" ADD CONSTRAINT "OrganizationAgentConfigFolder_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE; -ALTER TABLE "OrganizationAgentConfigFolder" ADD CONSTRAINT "OrganizationAgentConfigFolder_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "OrganizationAgentConfigFolder"("id") ON DELETE RESTRICT ON UPDATE CASCADE; +ALTER TABLE "OrganizationAgentConfigFolder" ADD CONSTRAINT "OrganizationAgentConfigFolder_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "OrganizationAgentConfigFolder"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "OrganizationAgentSkill" ADD CONSTRAINT "OrganizationAgentSkill_folderId_fkey" FOREIGN KEY ("folderId") REFERENCES "OrganizationAgentConfigFolder"("id") ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE "OrganizationAgentRole" ADD CONSTRAINT "OrganizationAgentRole_folderId_fkey" FOREIGN KEY ("folderId") REFERENCES "OrganizationAgentConfigFolder"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/hub/prisma/migrations/20260730120000_agent_config_folder_parent_cascade/migration.sql b/hub/prisma/migrations/20260730120000_agent_config_folder_parent_cascade/migration.sql new file mode 100644 index 0000000..7a096f0 --- /dev/null +++ b/hub/prisma/migrations/20260730120000_agent_config_folder_parent_cascade/migration.sql @@ -0,0 +1,5 @@ +-- Allow Organization wipe/cascade to clear nested agent-config folders. +-- Service layer still refuses non-empty folder deletes (ADR-0028); this only +-- unblocks parent-row removal during org teardown and test resetDb. +ALTER TABLE "OrganizationAgentConfigFolder" DROP CONSTRAINT "OrganizationAgentConfigFolder_parentId_fkey"; +ALTER TABLE "OrganizationAgentConfigFolder" ADD CONSTRAINT "OrganizationAgentConfigFolder_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "OrganizationAgentConfigFolder"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/hub/prisma/schema.prisma b/hub/prisma/schema.prisma index e70f880..621ee39 100644 --- a/hub/prisma/schema.prisma +++ b/hub/prisma/schema.prisma @@ -173,7 +173,7 @@ model OrganizationAgentConfigFolder { updatedAt DateTime @updatedAt organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) - parent OrganizationAgentConfigFolder? @relation("agentConfigFolderTree", fields: [parentId], references: [id], onDelete: Restrict) + parent OrganizationAgentConfigFolder? @relation("agentConfigFolderTree", fields: [parentId], references: [id], onDelete: Cascade) children OrganizationAgentConfigFolder[] @relation("agentConfigFolderTree") skills OrganizationAgentSkill[] roles OrganizationAgentRole[]