diff --git a/server/pruef-personen-liste.mjs b/server/pruef-personen-liste.mjs index db7d85f7..57363b21 100644 --- a/server/pruef-personen-liste.mjs +++ b/server/pruef-personen-liste.mjs @@ -71,6 +71,18 @@ anlegen("Patrick", "scout", "CODE-PATR-0001"); anlegen("SpongBobSchwammKopf", "creator", "CODE-SPON-0001"); anlegen("Tili", "creator", "CODE-TILI-0001"); anlegen("BanaStift", "manager", "CODE-BSTF-0001", 0); // gesperrt + +/* GENAU EINE PERSON IST PER BENACHRICHTIGUNG ERREICHBAR (03.10.2026). + + Damit laesst sich der Hinweis "bekommt keine Benachrichtigungen" + in beide Richtungen pruefen: Er muss bei den anderen stehen UND + bei dieser fehlen. Stuende er ueberall, waere die Pruefung "er + steht da" wertlos -- sie koennte gar nichts anderes messen. */ +d.prepare(`INSERT INTO push_anmeldungen + (endpunkt, person_id, p256dh, auth, geraet, erstellt, zuletzt_ok, fehler) + VALUES (?, (SELECT id FROM personen WHERE name = 'Patrick'), ?,?,?,?,?,0)`) + .run("https://example.invalid/push/patrick", "p256dh-platzhalter", + "auth-platzhalter", "Pruefgeraet", jetzt, jetzt); d.close(); const { chromium } = await import( @@ -91,6 +103,13 @@ async function seiteFuer(kontext) { const lesen = (seite) => seite.evaluate(() => ({ namen: [...document.querySelectorAll(".person__name")].map((n) => n.textContent.replace(" (du)", "")), + /* Zu wem gehoert welcher Hinweis? Die Kachel ist die Klammer -- + sonst waere nicht zu unterscheiden, ob der Hinweis bei Patrick + oder bei seinem Nachbarn steht. */ + ohnePush: [...document.querySelectorAll(".person")] + .filter((k) => [...k.querySelectorAll(".person__bezug")] + .some((z) => /keine Benachrichtigungen/.test(z.textContent))) + .map((k) => k.querySelector(".person__name")?.textContent.replace(" (du)", "")), abschnitte: [...document.querySelectorAll(".gruppe")].map((g) => ({ name: g.querySelector(".gruppe__name")?.textContent, zahl: g.querySelector(".gruppe__zahl")?.textContent, @@ -188,6 +207,24 @@ console.log("\n3) Der Sammelknopf klappt alles auf und wieder zu"); `Zusatztext wörtlich von der Zugangsseite ("${r.abschnitte[2]?.unter}")`); } +console.log("\n3b) Wer bekommt ueberhaupt eine Benachrichtigung?"); +{ + const r = await lesen(seite); + /* Am 03.10.2026 nachgemessen: 20 aktive Personen im Haus, 8 mit + einer Anmeldung. Zwoelf bekamen nichts, und niemand konnte das + sehen -- auch sie selbst nicht. */ + ok(r.ohnePush.length > 0 && r.ohnePush.includes("Tili"), + `der Hinweis steht bei den Unerreichbaren (${r.ohnePush.join(", ") || "nirgends"})`); + ok(!r.ohnePush.includes("Patrick"), + "aber NICHT bei Patrick, der ein Geraet angemeldet hat"); + /* Bei einer gesperrten Person ist es keine Luecke, sondern richtig + so -- sie soll ja nichts mehr bekommen. */ + ok(!r.ohnePush.includes("BanaStift"), + "und nicht bei der gesperrten Person (dort waere es kein Mangel)"); + ok(r.ohnePush.length === r.namen.length - 2, + `genau die ${r.namen.length - 2} aktiven ohne Geraet (${r.ohnePush.length})`); +} + console.log("\n4) Der Zustand überlebt das Neuladen – je Rolle einzeln"); { /* Nur die Creator zuklappen. Es muss die EINZELNE Einstellung diff --git a/server/workspace-personen.js b/server/workspace-personen.js index 46e70ad1..7bdcc801 100644 --- a/server/workspace-personen.js +++ b/server/workspace-personen.js @@ -355,6 +355,26 @@ personenRouter.get("/workspace/api/verwaltung/personen", (req, res) => { Scouts an ihm haengen. Beides aus derselben Abfrage -- eine zweite waere eine zweite Gelegenheit, dass die Liste etwas anderes sagt als die Rechte. */ + /* ERREICHT SIE UEBERHAUPT EINE BENACHRICHTIGUNG? (03.10.2026) + + Am 03.10. nachgemessen: 20 aktive Personen, aber nur + 8 mit einer Anmeldung. Zwoelf bekommen nichts -- + darunter ein Modi und die linke Hand. Niemand konnte + das sehen, auch sie selbst nicht: Die Glocke sagt es + nur dem, der sie anschaut. + + Wer etwas Wichtiges schreibt, soll nicht raten + muessen, wen es erreicht. Deshalb steht es dort, wo + ohnehin ueber Personen entschieden wird, und nicht + auf einer eigenen Seite, die niemand aufruft. + + Aus DERSELBEN Abfrage wie alles andere -- eine + zweite waere eine zweite Gelegenheit, dass die Liste + etwas anderes sagt als die Wirklichkeit. */ + (SELECT COUNT(*) FROM push_anmeldungen pa + WHERE pa.person_id = p.id) AS push_geraete, + (SELECT MAX(pa.zuletzt_ok) FROM push_anmeldungen pa + WHERE pa.person_id = p.id) AS push_zuletzt, sz.manager_id, (SELECT name FROM personen m WHERE m.id = sz.manager_id) AS manager_name, (SELECT COUNT(*) FROM scout_zuteilung z WHERE z.manager_id = p.id) AS scouts_anzahl diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 0d0d8e79..36dc6236 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,8 +16,8 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +