feat(feedback): Fehler-melden-Dialog + ID-kopieren (Stammbaum/Akte/Wurf)
Rechtsklick auf eine Maus im Stammbaum öffnet ein Kontextmenü mit „ID kopieren" (Clipboard + Toast) und „Fehler melden". Zusätzlich „Fehler melden"-Buttons in der Rennmausakte und der Wurf-Ansicht. Der Dialog erfasst eine Beschreibung und sendet sie samt Debug-Kontext (Ansicht, Tier-/Wurf-ID + Name, URL, Zeitstempel, User-Agent) an POST /feedback; gespeichert in einer neuen Feedback-Tabelle. Backend: Feedback-Entity (lose nullable GerbilId/LitterId ohne FK), Endpoints POST/GET /feedback, EF-Migration AddFeedback. Die Tabelle wird vom Import-Ingest NICHT geleert — Feedback überlebt Re-Ingests (Test deckt das ab). Tests: FeedbackEndpointTests (persistiert, 400 bei leer, übersteht Ingest-Wipe); e2e feedback.spec.ts. tsc/eslint/vitest(129)/playwright(6)/dotnet(212) grün. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -438,6 +438,11 @@ export const de = {
|
||||
createdOn: 'Erstellt am',
|
||||
born: 'geb.',
|
||||
},
|
||||
/** FEEDBACK: Rechtsklick-Kontextmenü auf einer Stammbaum-Karte. */
|
||||
contextMenu: {
|
||||
copyId: 'ID kopieren',
|
||||
reportError: 'Fehler melden',
|
||||
},
|
||||
},
|
||||
// ── FEAT-7 (Kelly): Statistik & Berichte ──
|
||||
statistik: {
|
||||
@@ -842,6 +847,37 @@ export const de = {
|
||||
unknown: 'Ein unbekannter Fehler ist aufgetreten.',
|
||||
},
|
||||
},
|
||||
// ── FEEDBACK: "Fehler melden" Dialog + "ID kopieren" Aktion ──
|
||||
feedback: {
|
||||
/** Button-Beschriftung (Tierakte, Wurf-Ansicht). */
|
||||
button: 'Fehler melden',
|
||||
dialogTitle: 'Fehler melden',
|
||||
intro: 'Beschreibe kurz, was nicht stimmt. Technische Angaben werden automatisch mitgesendet.',
|
||||
label: 'Beschreibung',
|
||||
placeholder: 'Was funktioniert nicht oder ist falsch dargestellt?',
|
||||
/** Überschrift über den automatisch erfassten Debug-Angaben. */
|
||||
debugTitle: 'Automatisch erfasst',
|
||||
debugFields: {
|
||||
context: 'Ansicht',
|
||||
entity: 'Datensatz',
|
||||
url: 'Adresse',
|
||||
},
|
||||
contexts: {
|
||||
stammbaum: 'Stammbaum',
|
||||
'gerbil-detail': 'Rennmausakte',
|
||||
'litter-detail': 'Wurf',
|
||||
},
|
||||
submit: 'Senden',
|
||||
submitting: 'Wird gesendet …',
|
||||
cancel: 'Abbrechen',
|
||||
close: 'Schließen',
|
||||
success: 'Danke! Dein Fehlerbericht wurde gesendet.',
|
||||
error: 'Fehlerbericht konnte nicht gesendet werden.',
|
||||
emptyMessage: 'Bitte beschreibe den Fehler.',
|
||||
/** Toast nach erfolgreichem "ID kopieren". */
|
||||
idCopied: 'ID kopiert',
|
||||
idCopyFailed: 'ID konnte nicht kopiert werden.',
|
||||
},
|
||||
common: {
|
||||
loading: 'Lädt …',
|
||||
retry: 'Erneut versuchen',
|
||||
|
||||
Reference in New Issue
Block a user