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