-- +goose Up -- Фаза 7: OAuth-провайдеры (AGENT.md 7.1). -- -- Связь внешнего аккаунта с пользователем инстанса. Внешний идентификатор -- (subject) хранится только как blind index (HMAC-SHA-256 от -- "provider:subject"), email — тоже индексом: сырых PII в таблице нет -- (AGENT.md 9.2). Токены провайдеров не сохраняются вовсе: они нужны только -- на время обмена кода на профиль. -- -- `IF NOT EXISTS` — страховка от частично применённой миграции: на стенде -- таблицу успела создать промежуточная редакция 00018 (в ней обе таблицы -- жили вместе), и без этого инстанс не поднимался после обновления. CREATE TABLE IF NOT EXISTS oauth_accounts ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE, provider TEXT NOT NULL, subject_index TEXT NOT NULL, email_index TEXT NOT NULL DEFAULT '', created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), last_login_at TEXT, UNIQUE (provider, subject_index) ); CREATE INDEX IF NOT EXISTS oauth_accounts_user_idx ON oauth_accounts (user_id); -- +goose Down DROP TABLE IF EXISTS oauth_accounts;