wulf-pulse/migrations/008_relax_tickets_resource_constraints.sql

50 lines
2.1 KiB
MySQL
Raw Normal View History

-- Migration 008: Relax tickets resource foreign key constraints
-- Allows tickets to sync even if assigned resources don't exist in our database
-- This is necessary because:
-- 1. Some tickets may reference deleted/inactive resources
-- 2. Resource sync may be incomplete
-- 3. Autotask may have data inconsistencies
-- Drop the strict foreign key constraint on assigned_resource_id
ALTER TABLE tickets DROP CONSTRAINT IF EXISTS tickets_assigned_resource_id_fkey;
-- Drop other resource-related constraints that might cause issues
ALTER TABLE tickets DROP CONSTRAINT IF EXISTS tickets_first_response_assigned_resource_id_fkey;
ALTER TABLE tickets DROP CONSTRAINT IF EXISTS tickets_first_response_initiating_resource_id_fkey;
-- Make assigned_resource_id nullable (it should already be, but ensure it)
ALTER TABLE tickets ALTER COLUMN assigned_resource_id DROP NOT NULL;
ALTER TABLE tickets ALTER COLUMN first_response_assigned_resource_id DROP NOT NULL;
ALTER TABLE tickets ALTER COLUMN first_response_initiating_resource_id DROP NOT NULL;
-- Re-add as lenient foreign keys with ON DELETE SET NULL
-- This allows tickets to exist even if the resource doesn't exist
ALTER TABLE tickets
ADD CONSTRAINT tickets_assigned_resource_id_fkey
FOREIGN KEY (assigned_resource_id) REFERENCES resources(id)
ON DELETE SET NULL
DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE tickets
ADD CONSTRAINT tickets_first_response_assigned_resource_id_fkey
FOREIGN KEY (first_response_assigned_resource_id) REFERENCES resources(id)
ON DELETE SET NULL
DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE tickets
ADD CONSTRAINT tickets_first_response_initiating_resource_id_fkey
FOREIGN KEY (first_response_initiating_resource_id) REFERENCES resources(id)
ON DELETE SET NULL
DEFERRABLE INITIALLY DEFERRED;
-- Also relax tasks resource constraint
ALTER TABLE tasks DROP CONSTRAINT IF EXISTS tasks_assigned_resource_id_fkey;
ALTER TABLE tasks ALTER COLUMN assigned_resource_id DROP NOT NULL;
ALTER TABLE tasks
ADD CONSTRAINT tasks_assigned_resource_id_fkey
FOREIGN KEY (assigned_resource_id) REFERENCES resources(id)
ON DELETE SET NULL
DEFERRABLE INITIALLY DEFERRED;