-- +goose Up -- Фаза 7: Web Push (AGENT.md 7.16). -- -- Подписка браузера (Push API) живёт на устройстве: эндпоинт выдаёт push-сервис -- (FCM/Mozilla/Apple), ключи p256dh/auth шифруют payload по RFC 8291. Один -- пользователь может подписать несколько устройств, поэтому уникален эндпоинт, -- а не пользователь: повторная подписка с того же устройства обновляет запись. -- -- Счётчик неудач и время последнего успеха нужны, чтобы чистить мёртвые -- подписки: push-сервис отвечает 404/410 на отозванные, а временные сбои -- (5xx, 429) не должны удалять запись сразу. CREATE TABLE push_subscriptions ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE, endpoint TEXT NOT NULL UNIQUE, p256dh TEXT NOT NULL, auth TEXT NOT NULL, user_agent TEXT NOT NULL DEFAULT '', created_at TEXT NOT NULL, last_success_at TEXT, last_failure_at TEXT, failure_count INTEGER NOT NULL DEFAULT 0 ); CREATE INDEX push_subscriptions_user_idx ON push_subscriptions (user_id); -- +goose Down DROP TABLE push_subscriptions;