generated from VLADIMIR/template
add docs
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
-- +goose Up
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS user_agreements (
|
||||
id SERIAL PRIMARY KEY,
|
||||
-- user_id NULL-able: при удалении аккаунта FK-ограничение обнуляет
|
||||
-- ссылку (ON DELETE SET NULL), а сама запись об акцепте остаётся в
|
||||
-- обезличенном виде (факт согласия, ст. 9 ч. 4 152-ФЗ — бремя
|
||||
-- доказывания на операторе). Персональные данные внутри записи
|
||||
-- (ip, user_agent) обнуляет users_repo.DeleteUser.
|
||||
user_id INTEGER,
|
||||
agreement_type VARCHAR(50) NOT NULL,
|
||||
version VARCHAR(50) NOT NULL,
|
||||
accepted_at TIMESTAMP NOT NULL DEFAULT NOW (),
|
||||
ip VARCHAR(45),
|
||||
user_agent TEXT,
|
||||
|
||||
CONSTRAINT fk_user_agreements_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE SET NULL,
|
||||
CONSTRAINT uq_user_agreement UNIQUE (user_id, agreement_type, version),
|
||||
CONSTRAINT chk_user_agreement_type CHECK (agreement_type IN ('terms', 'privacy'))
|
||||
);
|
||||
|
||||
-- Отдельный индекс по user_id не нужен: UNIQUE (user_id, agreement_type, version)
|
||||
-- уже покрывает выборки по префиксу user_id.
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE IF EXISTS user_agreements;
|
||||
@@ -0,0 +1,39 @@
|
||||
-- +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;
|
||||
Reference in New Issue
Block a user