feat: persist push subscriptions in sqlite
All checks were successful
CI / Lint, typecheck and build (push) Successful in 9m54s
All checks were successful
CI / Lint, typecheck and build (push) Successful in 9m54s
This commit is contained in:
@@ -14,7 +14,7 @@ Wszystkie zewnętrzne źródła danych są wywoływane przez route handlery Next
|
||||
|
||||
## Powiadomienia
|
||||
|
||||
Endpointy powiadomień działają w runtime Node.js, bo korzystają z `web-push` i pamięciowego magazynu subskrypcji.
|
||||
Endpointy powiadomień działają w runtime Node.js, bo korzystają z `web-push` i lokalnego magazynu SQLite dla subskrypcji.
|
||||
|
||||
| Metoda | Endpoint | Przeznaczenie |
|
||||
| --- | --- | --- |
|
||||
|
||||
@@ -60,6 +60,7 @@ WEB_PUSH_VAPID_PRIVATE_KEY=
|
||||
WEB_PUSH_VAPID_SUBJECT=mailto:admin@example.com
|
||||
NOTIFICATIONS_CRON_SECRET=
|
||||
WTR_APP_URL=http://127.0.0.1:3000
|
||||
WTR_DATABASE_PATH=./data/wtr.sqlite
|
||||
NOTIFICATIONS_WARNING_INTERVAL_MINUTES=5
|
||||
NOTIFICATIONS_MORNING_BRIEF_TIME=07:00
|
||||
NOTIFICATIONS_TOMORROW_BRIEF_TIME=18:00
|
||||
@@ -67,6 +68,8 @@ NOTIFICATIONS_TOMORROW_BRIEF_TIME=18:00
|
||||
|
||||
Do zwykłego uruchomienia aplikacji pogodowej zmienne Web Push nie są wymagane. Są potrzebne dopiero dla powiadomień.
|
||||
|
||||
`WTR_DATABASE_PATH` wskazuje plik SQLite z subskrypcjami Web Push i historią wysyłek. Na self-hostingu ustaw go na ścieżkę w trwałym katalogu, np. `/home/admin/wtr-data/wtr.sqlite`, jeśli katalog projektu jest podmieniany podczas deploya.
|
||||
|
||||
## Jakość
|
||||
|
||||
Przed zakończeniem zmian uruchamiaj:
|
||||
|
||||
@@ -31,6 +31,14 @@ Endpointy harmonogramu wymagają też sekretu crona w produkcji:
|
||||
NOTIFICATIONS_CRON_SECRET=
|
||||
```
|
||||
|
||||
Subskrypcje Web Push i historia wysyłek są zapisywane w SQLite:
|
||||
|
||||
```bash
|
||||
WTR_DATABASE_PATH=./data/wtr.sqlite
|
||||
```
|
||||
|
||||
Jeśli zmienna nie jest ustawiona, aplikacja używa `./data/wtr.sqlite` względem katalogu projektu.
|
||||
|
||||
## Preferencje Subskrypcji
|
||||
|
||||
Subskrypcja Web Push zapisuje:
|
||||
@@ -114,6 +122,6 @@ x-cron-secret: <NOTIFICATIONS_CRON_SECRET>
|
||||
|
||||
## Ograniczenia
|
||||
|
||||
Obecny `lib/push-store.ts` przechowuje subskrypcje i historię wysyłek w pamięci procesu. Po restarcie procesu te dane znikają. Produkcja wymaga trwałego magazynu, np. bazy danych albo KV.
|
||||
`lib/push-store.ts` przechowuje subskrypcje i historię wysyłek w lokalnym SQLite przez `better-sqlite3`. Dane przetrwają restart procesu, jeśli plik wskazany przez `WTR_DATABASE_PATH` znajduje się w trwałym katalogu. Na self-hostingu warto backupować plik bazy razem z plikami `-wal` i `-shm`, jeśli istnieją.
|
||||
|
||||
Powiadomienie testowe jest wysyłane na konkretny endpoint subskrypcji przekazany z `/settings`, a nie broadcastowane do wszystkich urządzeń.
|
||||
|
||||
Reference in New Issue
Block a user