Files
prod/migrations/20260818232725_keep_content_on_user_delete.sql
T
2026-10-03 20:39:03 +07:00

40 lines
2.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- +goose Up
-- Сценарии и команды сохраняются при удалении аккаунта автора:
-- привязка к пользователю обнуляется (обезличивание, ст. 3 152-ФЗ),
-- сам контент остаётся в Сервисе (лицензия по п. 7.2 Пользовательского соглашения).
ALTER TABLE scenarios ALTER COLUMN author_id DROP NOT NULL;
ALTER TABLE scenarios DROP CONSTRAINT IF EXISTS fk_scenarios_author;
ALTER TABLE scenarios ADD CONSTRAINT fk_scenarios_author
FOREIGN KEY (author_id) REFERENCES users (id) ON DELETE SET NULL;
ALTER TABLE teams ALTER COLUMN creator_id DROP NOT NULL;
ALTER TABLE teams DROP CONSTRAINT IF EXISTS fk_teams_creator;
ALTER TABLE teams ADD CONSTRAINT fk_teams_creator
FOREIGN KEY (creator_id) REFERENCES users (id) ON DELETE SET NULL;
-- status у сценариев всегда задан (default 'draft'): NULL-значение сломало бы
-- guard'ы вида "status <> 'public'" в scenarios_repo (NULL даёт NULL, т.е. ложь).
-- На БД с историческими NULL-данными сначала приводим их к default'у.
UPDATE scenarios SET status = 'draft' WHERE status IS NULL;
ALTER TABLE scenarios ALTER COLUMN status SET NOT NULL;
-- +goose Down
-- Восстановление прежней схемы: автор обязателен, при удалении пользователя —
-- удаление его контента запрещено (RESTRICT).
DELETE FROM scenarios WHERE author_id IS NULL;
DELETE FROM teams WHERE creator_id IS NULL;
ALTER TABLE scenarios ALTER COLUMN status DROP NOT NULL;
ALTER TABLE scenarios DROP CONSTRAINT IF EXISTS fk_scenarios_author;
ALTER TABLE scenarios ADD CONSTRAINT fk_scenarios_author
FOREIGN KEY (author_id) REFERENCES users (id) ON DELETE RESTRICT;
ALTER TABLE scenarios ALTER COLUMN author_id SET NOT NULL;
ALTER TABLE teams DROP CONSTRAINT IF EXISTS fk_teams_creator;
ALTER TABLE teams ADD CONSTRAINT fk_teams_creator
FOREIGN KEY (creator_id) REFERENCES users (id) ON DELETE RESTRICT;
ALTER TABLE teams ALTER COLUMN creator_id SET NOT NULL;