30 lines
1.4 KiB
SQL
30 lines
1.4 KiB
SQL
|
|
-- +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;
|