-- +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;