Mention-Benachrichtigungen #151

Closed
opened 2026-07-20 00:15:48 +02:00 by fable-5 · 1 comment
Collaborator

Ziel

Wer neu in einer Seite erwähnt wird, bekommt eine Glocken-Benachrichtigung.

Abhängigkeit: setzt #150 (@-Mentions: Inline-Node, User-Suche, Autocomplete) voraus.

Umsetzungsskizze

  • Neuer Typ mentioned in NOTIFICATION_TYPES (packages/shared/src/notifications.ts).
  • Derived Tabelle page_mentions (page_id, user_id) (DB-Migration), geschrieben beim Persistieren in apps/collab/src/persistence.ts und apps/api/src/pages/yjs-content.ts (Muster page_links).
  • Fanout-Erweiterung in apps/api/src/notifications/version-event-listener.service.ts: nur NEU hinzugekommene userIds benachrichtigen (Diff alt/neu — kein Spam bei jedem Save), Actor ausgeschlossen, Zustellung NUR nach canAccessPage-Recheck (konsistent mit NotificationsService.fanout — Erwähnte ohne Leserecht bekommen nichts, kein Leak).
  • Glocken-UI: Text für den neuen Typ (de+en).

Akzeptanzkriterien

  • Neu Erwähnte werden genau einmal benachrichtigt, nicht bei jedem Folge-Save.
  • Selbst-Erwähnung erzeugt nichts; Erwähnte ohne Leserecht erhalten nichts.
  • Klick auf die Benachrichtigung öffnet die Seite.

Bewusst nicht enthalten

Mentions in Kommentaren, E-Mail-Integration des neuen Typs.

## Ziel Wer neu in einer Seite erwähnt wird, bekommt eine Glocken-Benachrichtigung. **Abhängigkeit:** setzt #150 (@-Mentions: Inline-Node, User-Suche, Autocomplete) voraus. ## Umsetzungsskizze - Neuer Typ `mentioned` in `NOTIFICATION_TYPES` (`packages/shared/src/notifications.ts`). - Derived Tabelle `page_mentions (page_id, user_id)` (**DB-Migration**), geschrieben beim Persistieren in `apps/collab/src/persistence.ts` und `apps/api/src/pages/yjs-content.ts` (Muster `page_links`). - Fanout-Erweiterung in `apps/api/src/notifications/version-event-listener.service.ts`: nur NEU hinzugekommene userIds benachrichtigen (Diff alt/neu — kein Spam bei jedem Save), Actor ausgeschlossen, Zustellung NUR nach `canAccessPage`-Recheck (konsistent mit `NotificationsService.fanout` — Erwähnte ohne Leserecht bekommen nichts, kein Leak). - Glocken-UI: Text für den neuen Typ (de+en). ## Akzeptanzkriterien - Neu Erwähnte werden genau einmal benachrichtigt, nicht bei jedem Folge-Save. - Selbst-Erwähnung erzeugt nichts; Erwähnte ohne Leserecht erhalten nichts. - Klick auf die Benachrichtigung öffnet die Seite. ## Bewusst nicht enthalten Mentions in Kommentaren, E-Mail-Integration des neuen Typs.
fable-5 added this to the M22 — Aufgaben milestone 2026-07-20 00:15:48 +02:00
Author
Collaborator

Umgesetzt in PR #158 (f9d23bf): Neuer Typ mentioned; Tabelle page_mentions (Migration), beim Collab-Persist transaktional neu geschrieben; nur NEU hinzugekommene Erwaehnungen loesen pg_notify page_mentions_changed aus (kein Spam bei Folge-Saves). Der api-Listener ruft fanoutMentions: Zustellung NUR nach canAccessPage-Recheck, Autoren (pending contributors) nie an sich selbst. Glocken-Text de+en. DB-Test (Leser ja / ohne Leserecht nein / Autor nein); kompletter Loop live verifiziert (Tippen → Persist → Notification beim Erwaehnten).

Umgesetzt in PR #158 (f9d23bf): Neuer Typ mentioned; Tabelle page_mentions (Migration), beim Collab-Persist transaktional neu geschrieben; nur NEU hinzugekommene Erwaehnungen loesen pg_notify page_mentions_changed aus (kein Spam bei Folge-Saves). Der api-Listener ruft fanoutMentions: Zustellung NUR nach canAccessPage-Recheck, Autoren (pending contributors) nie an sich selbst. Glocken-Text de+en. DB-Test (Leser ja / ohne Leserecht nein / Autor nein); kompletter Loop live verifiziert (Tippen → Persist → Notification beim Erwaehnten).
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stwaidele/dorfteich#151
No description provided.