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