From 81e617ece5d1d009ff566aaf0a9630ff7fc02dac Mon Sep 17 00:00:00 2001 From: neodk2004 Date: Sun, 4 Oct 2026 13:16:48 +0200 Subject: [PATCH] fix(admin): Melder-Nachricht grammatisch korrekt (zum Beitrag/Profil) Co-Authored-By: Claude Opus 5.5 --- mobile/found.md | 2 +- src/__tests__/admin-report-feedback.test.ts | 6 +++--- src/lib/report-feedback.ts | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mobile/found.md b/mobile/found.md index a4987e4..64e6219 100644 --- a/mobile/found.md +++ b/mobile/found.md @@ -181,4 +181,4 @@ Neu 7: - Feature: Storie-Edit Modus, mittels Overlays eigene Storys hübsch machen, durch Texteingaben in das Bild oder Effekte oder Gifs. (Analog zu Instagram) ->Branch - [x] Admin-Dashboard -> Zurückgewiesene Reports, als Meldung an den Melder mit einer Begründung warum abgewiesen wurde. Sowie Meldung bei bestätigter Report löschung, z.b mit Danksagung für die Meldung. - → **Umgesetzt und live (04.10.), als Team-Nachricht.** Admin → Reports: „Report ignorieren“ hat jetzt ein Feld „Begründung für den Melder“; der Melder bekommt vom PawFeed-Team „Danke für deine Meldung zu den Beitrag/das Profil von X … kein Verstoß … Begründung: …“ (Begründung steht zusätzlich im Moderations-Log). „Post löschen“ dankt jedem Melder des Beitrags einmal („… Inhalt entfernt. Danke, dass du hilfst …“); die interne Lösch-Begründung geht bewusst nicht an den Melder. Beides per Schalter im Dialog abschaltbar, Versand erst nach erfolgreicher Moderation und ohne sie bei einem Fehler zu kippen. **Nebenbei behoben:** Beim Löschen eines gemeldeten Beitrags blieben dessen Reports verwaist in der Liste (`targetPostId` ist keine Relation) — werden jetzt mitgelöscht. 7 neue Tests (`admin-report-feedback.test.ts`), alle 336 Tests grün. Commit `f51b158`, Rolling-Deploy auf dem NAS. Kein App-Update nötig. Im Live-Admin noch nicht mit einem echten Report ausprobiert. + → **Umgesetzt und live (04.10.), als Team-Nachricht.** Admin → Reports: „Report ignorieren“ hat jetzt ein Feld „Begründung für den Melder“; der Melder bekommt vom PawFeed-Team „Danke für deine Meldung zum Beitrag/Profil von X … kein Verstoß … Begründung: …“ (Begründung steht zusätzlich im Moderations-Log). „Post löschen“ dankt jedem Melder des Beitrags einmal („… Inhalt entfernt. Danke, dass du hilfst …“); die interne Lösch-Begründung geht bewusst nicht an den Melder. Beides per Schalter im Dialog abschaltbar, Versand erst nach erfolgreicher Moderation und ohne sie bei einem Fehler zu kippen. **Nebenbei behoben:** Beim Löschen eines gemeldeten Beitrags blieben dessen Reports verwaist in der Liste (`targetPostId` ist keine Relation) — werden jetzt mitgelöscht. 7 neue Tests (`admin-report-feedback.test.ts`), alle 336 Tests grün. Commit `f51b158`, Rolling-Deploy auf dem NAS. Kein App-Update nötig. Im Live-Admin noch nicht mit einem echten Report ausprobiert. diff --git a/src/__tests__/admin-report-feedback.test.ts b/src/__tests__/admin-report-feedback.test.ts index b7ebc79..beff45e 100644 --- a/src/__tests__/admin-report-feedback.test.ts +++ b/src/__tests__/admin-report-feedback.test.ts @@ -62,7 +62,7 @@ describe("admin.dismissReport reporter feedback", () => { expect(mockSendTeamMessage).toHaveBeenCalledTimes(1); const [, petId, body] = mockSendTeamMessage.mock.calls[0]; expect(petId).toBe("reporter-1"); - expect(body).toContain("den Beitrag von Bubi"); + expect(body).toContain("Meldung zum Beitrag von Bubi"); expect(body).toContain("keinen Verstoß"); expect(body).toContain("Begründung: Das ist ein normales Spielvideo."); expect(mockPrisma.moderationLog.create).toHaveBeenCalledWith( @@ -80,7 +80,7 @@ describe("admin.dismissReport reporter feedback", () => { await caller.admin.dismissReport({ reportId: "r2" }); const body = mockSendTeamMessage.mock.calls[0][2] as string; - expect(body).toContain("das Profil von Luna"); + expect(body).toContain("Meldung zum Profil von Luna"); expect(body).not.toContain("Begründung"); }); @@ -122,7 +122,7 @@ describe("admin.deleteReportedPost reporter feedback", () => { expect(mockPrisma.report.deleteMany).toHaveBeenCalledWith({ where: { targetPostId: "post-1" } }); expect(mockSendTeamMessage.mock.calls.map((c) => c[1])).toEqual(["reporter-1", "reporter-2"]); const body = mockSendTeamMessage.mock.calls[0][2] as string; - expect(body).toContain("den Beitrag von Bubi"); + expect(body).toContain("Meldung zum Beitrag von Bubi"); expect(body).toContain("Inhalt entfernt"); // Die interne Lösch-Begründung geht nicht an den Melder. expect(body).not.toContain("Gewaltdarstellung"); diff --git a/src/lib/report-feedback.ts b/src/lib/report-feedback.ts index eff1294..b77bf67 100644 --- a/src/lib/report-feedback.ts +++ b/src/lib/report-feedback.ts @@ -10,9 +10,9 @@ const SIGNATURE = "Bei Fragen antworte einfach auf diese Nachricht. Dein PawFeed-Team"; -/** „den Beitrag von Bubi“ / „das Profil von Bubi“ — Fallback ohne Namen, falls das Ziel nicht mehr existiert. */ +/** „zum Beitrag von Bubi“ / „zum Profil von Bubi“ — Fallback ohne Namen, falls das Ziel nicht mehr existiert. */ export function describeReportTarget(kind: "post" | "pet", targetPetName: string | null): string { - const noun = kind === "post" ? "den Beitrag" : "das Profil"; + const noun = kind === "post" ? "zum Beitrag" : "zum Profil"; return targetPetName ? `${noun} von ${targetPetName}` : noun; } @@ -20,7 +20,7 @@ export function reportDismissedMessage(target: string, reason: string): string { const trimmedReason = reason.trim(); const reasonPart = trimmedReason ? `\n\nBegründung: ${trimmedReason}` : ""; return ( - `Hallo, danke für deine Meldung zu ${target}. Wir haben sie geprüft und ` + + `Hallo, danke für deine Meldung ${target}. Wir haben sie geprüft und ` + `keinen Verstoß gegen unsere Community-Richtlinien festgestellt, deshalb bleibt der Inhalt online.` + `${reasonPart}\n\n${SIGNATURE}` ); @@ -28,7 +28,7 @@ export function reportDismissedMessage(target: string, reason: string): string { export function reportUpheldMessage(target: string): string { return ( - `Hallo, danke für deine Meldung zu ${target}. Wir haben sie geprüft und den Inhalt entfernt. ` + + `Hallo, danke für deine Meldung ${target}. Wir haben sie geprüft und den Inhalt entfernt. ` + `Danke, dass du hilfst, PawFeed sicher und freundlich zu halten!\n\n${SIGNATURE}` ); }