-- +goose Up -- Фаза 7: passkeys (WebAuthn), AGENT.md 7.1. -- -- Таблица webauthn_credentials создана в 00002 «на вырост» и до Фазы 7 не -- использовалась ни одной строкой кода, поэтому пересобираем её в том виде, -- который нужен рабочей реализации: полная запись credential хранится в JSON -- (credential_json) — так структура не разъезжается с версиями библиотеки -- go-webauthn, а отдельные колонки нужны только для списка ключей. -- PII здесь нет: имя ключа задаёт сам пользователь. DROP TABLE webauthn_credentials; CREATE TABLE webauthn_credentials ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE, credential_id TEXT NOT NULL UNIQUE, name TEXT NOT NULL DEFAULT '', credential_json TEXT NOT NULL, sign_count INTEGER NOT NULL DEFAULT 0, transports TEXT NOT NULL DEFAULT '', created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), last_used_at TEXT ); CREATE INDEX webauthn_credentials_user_idx ON webauthn_credentials (user_id); -- +goose Down DROP TABLE webauthn_credentials; CREATE TABLE webauthn_credentials ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE, credential_id TEXT NOT NULL UNIQUE, public_key BLOB NOT NULL, sign_count INTEGER NOT NULL DEFAULT 0, transports TEXT NOT NULL DEFAULT '', created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) );