axe/internal/db/migrations/0013_project_delete_cascade.sql

31 lines
1.9 KiB
MySQL
Raw Permalink Normal View History

2026-10-18 19:07:25 +00:00
-- 0013_project_delete_cascade — удаление проекта администратором (каскадом).
--
-- Удаление проекта — действие админа (DELETE /projects/:id, RequireRole
-- "admin"). Решение: проект удаляется вместе с заявками, а не запретом 409
-- на непустой проект. Каскады событий/фото на tickets (0006/0008) и
-- объектов/участий на projects (0004) уже есть — здесь пересоздаются
-- только два FK из tickets, чтобы и заявки уходили вместе с проектом:
--
-- tickets (object_id, project_id) → project_objects (id, project_id)
-- каскад нужен, чтобы объекты проекта уносили свои заявки;
-- tickets (project_id, client_id) → projects (id, client_id)
-- каскад: заявка проекта уходит вместе с проектом.
--
-- Ограничения профилей из заявок (client_id/worker_id/assigned_by →
-- profiles) остаются NO ACTION: удаление клиента с заявками — по-прежнему
-- 409 «отключите вместо удаления».
--
-- Применённый файл не редактировать (checksum в schema_migrations).
ALTER TABLE tickets DROP CONSTRAINT IF EXISTS tickets_object_project_fk;
ALTER TABLE tickets ADD CONSTRAINT tickets_object_project_fk
FOREIGN KEY (object_id, project_id)
REFERENCES project_objects (id, project_id)
ON DELETE CASCADE;
ALTER TABLE tickets DROP CONSTRAINT IF EXISTS tickets_project_client_fk;
ALTER TABLE tickets ADD CONSTRAINT tickets_project_client_fk
FOREIGN KEY (project_id, client_id)
REFERENCES projects (id, client_id)
ON DELETE CASCADE;