diff --git a/src/PowderCoating.Infrastructure/Migrations/20260519151303_AddAppointmentReminderSentAt.cs b/src/PowderCoating.Infrastructure/Migrations/20260519151303_AddAppointmentReminderSentAt.cs index 94915cc..aba4627 100644 --- a/src/PowderCoating.Infrastructure/Migrations/20260519151303_AddAppointmentReminderSentAt.cs +++ b/src/PowderCoating.Infrastructure/Migrations/20260519151303_AddAppointmentReminderSentAt.cs @@ -11,47 +11,32 @@ namespace PowderCoating.Infrastructure.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { - migrationBuilder.DropForeignKey( - name: "FK_Jobs_ShopWorkers_ShopWorkerId", - table: "Jobs"); - - migrationBuilder.DropForeignKey( - name: "FK_JobTimeEntries_ShopWorkers_ShopWorkerId", - table: "JobTimeEntries"); - - migrationBuilder.DropForeignKey( - name: "FK_MaintenanceRecords_ShopWorkers_ShopWorkerId", - table: "MaintenanceRecords"); - - migrationBuilder.DropTable( - name: "ShopWorkerRoleCosts"); - - migrationBuilder.DropTable( - name: "ShopWorkers"); - - migrationBuilder.DropIndex( - name: "IX_MaintenanceRecords_ShopWorkerId", - table: "MaintenanceRecords"); - - migrationBuilder.DropIndex( - name: "IX_JobTimeEntries_ShopWorkerId", - table: "JobTimeEntries"); - - migrationBuilder.DropIndex( - name: "IX_Jobs_ShopWorkerId", - table: "Jobs"); - - migrationBuilder.DropColumn( - name: "ShopWorkerId", - table: "MaintenanceRecords"); - - migrationBuilder.DropColumn( - name: "ShopWorkerId", - table: "JobTimeEntries"); - - migrationBuilder.DropColumn( - name: "ShopWorkerId", - table: "Jobs"); + // Use IF EXISTS guards for all ShopWorker drops — prod and dev diverged on whether + // these objects exist, so unconditional drops would fail on whichever DB is missing them. + migrationBuilder.Sql(@" + IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Jobs_ShopWorkers_ShopWorkerId') + ALTER TABLE [Jobs] DROP CONSTRAINT [FK_Jobs_ShopWorkers_ShopWorkerId]; + IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_JobTimeEntries_ShopWorkers_ShopWorkerId') + ALTER TABLE [JobTimeEntries] DROP CONSTRAINT [FK_JobTimeEntries_ShopWorkers_ShopWorkerId]; + IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_MaintenanceRecords_ShopWorkers_ShopWorkerId') + ALTER TABLE [MaintenanceRecords] DROP CONSTRAINT [FK_MaintenanceRecords_ShopWorkers_ShopWorkerId]; + IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'ShopWorkerRoleCosts') + DROP TABLE [ShopWorkerRoleCosts]; + IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'ShopWorkers') + DROP TABLE [ShopWorkers]; + IF EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_MaintenanceRecords_ShopWorkerId' AND object_id = OBJECT_ID('MaintenanceRecords')) + DROP INDEX [IX_MaintenanceRecords_ShopWorkerId] ON [MaintenanceRecords]; + IF EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_JobTimeEntries_ShopWorkerId' AND object_id = OBJECT_ID('JobTimeEntries')) + DROP INDEX [IX_JobTimeEntries_ShopWorkerId] ON [JobTimeEntries]; + IF EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_Jobs_ShopWorkerId' AND object_id = OBJECT_ID('Jobs')) + DROP INDEX [IX_Jobs_ShopWorkerId] ON [Jobs]; + IF EXISTS (SELECT 1 FROM sys.columns WHERE name = 'ShopWorkerId' AND object_id = OBJECT_ID('MaintenanceRecords')) + ALTER TABLE [MaintenanceRecords] DROP COLUMN [ShopWorkerId]; + IF EXISTS (SELECT 1 FROM sys.columns WHERE name = 'ShopWorkerId' AND object_id = OBJECT_ID('JobTimeEntries')) + ALTER TABLE [JobTimeEntries] DROP COLUMN [ShopWorkerId]; + IF EXISTS (SELECT 1 FROM sys.columns WHERE name = 'ShopWorkerId' AND object_id = OBJECT_ID('Jobs')) + ALTER TABLE [Jobs] DROP COLUMN [ShopWorkerId]; + "); migrationBuilder.AddColumn( name: "ReminderSentAt",