diff --git a/packages/db/prisma/migrations/20260409_assignment_composite_indexes.sql b/packages/db/prisma/migrations/20260409_assignment_composite_indexes.sql new file mode 100644 index 0000000..126b176 --- /dev/null +++ b/packages/db/prisma/migrations/20260409_assignment_composite_indexes.sql @@ -0,0 +1,4 @@ +-- Migration: Add composite indexes on Assignment for capacity range queries + +CREATE INDEX IF NOT EXISTS "assignments_resourceId_status_endDate_idx" ON "assignments"("resourceId", "status", "endDate"); +CREATE INDEX IF NOT EXISTS "assignments_projectId_status_endDate_idx" ON "assignments"("projectId", "status", "endDate"); diff --git a/packages/db/prisma/migrations/20260409_assignment_demand_requirement_cascade.sql b/packages/db/prisma/migrations/20260409_assignment_demand_requirement_cascade.sql new file mode 100644 index 0000000..13695ea --- /dev/null +++ b/packages/db/prisma/migrations/20260409_assignment_demand_requirement_cascade.sql @@ -0,0 +1,7 @@ +-- Migration: Add SetNull cascade on Assignment → DemandRequirement FK +-- When a DemandRequirement is deleted, assignments lose their reference but are not deleted. + +ALTER TABLE "assignments" DROP CONSTRAINT IF EXISTS "assignments_demandRequirementId_fkey"; +ALTER TABLE "assignments" ADD CONSTRAINT "assignments_demandRequirementId_fkey" + FOREIGN KEY ("demandRequirementId") REFERENCES "demand_requirements"("id") + ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 1b13c80..8b8e262 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -1336,7 +1336,7 @@ model Assignment { metadata Json @db.JsonB @default("{}") overbookingAcknowledged Boolean @default(false) - demandRequirement DemandRequirement? @relation(fields: [demandRequirementId], references: [id]) + demandRequirement DemandRequirement? @relation(fields: [demandRequirementId], references: [id], onDelete: SetNull) resource Resource @relation(fields: [resourceId], references: [id]) project Project @relation(fields: [projectId], references: [id]) roleEntity Role? @relation(fields: [roleId], references: [id]) @@ -1354,6 +1354,8 @@ model Assignment { @@index([projectId, startDate, endDate]) @@index([status, startDate, endDate]) @@index([projectId, status, startDate, endDate]) + @@index([resourceId, status, endDate]) + @@index([projectId, status, endDate]) @@map("assignments") }