feat(D): Phase D — Undo/Restore komplett implementiert
Check Cross-Plugin Imports / check (push) Has been cancelled
Check Cross-Plugin Imports / check (push) Has been cancelled
- D-GEN: RestoreRegistry mit RestoreConfig (model_class, restore_permission, excluded_fields, special_handler) - D-HOOK: history_hooks.py mit register_history_hooks() für after_create/update/delete - D-CORE: Company create+update record_history in companies.py - D-PLUG: Task/Calendar/DMS record_history in services/routes - D-SOFT: Alle registrierten Entitäten haben deleted_at + un-delete via Registry - D-MAIL: Mail special_handler (IMAP Trash-Move, Folder-Verify) + record_history in delete/move - D-TRASH: GET /entity-history/trash (filterbar, paginiert) + Frontend Trash.tsx - D-TOAST: UndoToast.tsx (5s Auto-Dismiss, useUndoToast Hook) - D-HIST-UI: HistoryPanel.tsx (Timeline, Diff-View, Restore-Button) - D-BULK: POST /entity-history/bulk-restore mit partial_success Semantik - D-RET: POST /entity-history/retention/archive (GDPR hard-delete >90 Tage) - D-TEST: 26 Tests in test_restore_registry.py, alle grün - D-DOC: test-strategy.md + security_kernel.md aktualisiert Backend: 10 Dateien, Frontend: 7 Dateien, Tests: 1 Datei, Docs: 3 Dateien 26/26 Tests passed, TSC 0 errors, App import 492 routes
This commit is contained in:
@@ -907,7 +907,39 @@
|
||||
"restoreError": "Wiederherstellung fehlgeschlagen",
|
||||
"empty": "Keine Änderungshistorie vorhanden",
|
||||
"changes": "Änderungen",
|
||||
"fieldsChanged": "Felder geändert"
|
||||
"fieldsChanged": "Felder geändert",
|
||||
"actionCreate": "Erstellt",
|
||||
"actionUpdate": "Aktualisiert",
|
||||
"actionDelete": "Gelöscht"
|
||||
},
|
||||
"trash": {
|
||||
"title": "Papierkorb",
|
||||
"allTypes": "Alle Typen",
|
||||
"filterType": "Entity-Typ",
|
||||
"entityType": "Typ",
|
||||
"name": "Name",
|
||||
"deletedAt": "Gelöscht am",
|
||||
"actions": "Aktionen",
|
||||
"restore": "Wiederherstellen",
|
||||
"restored": "Wiederhergestellt",
|
||||
"restoreError": "Wiederherstellung fehlgeschlagen",
|
||||
"bulkRestore": "Ausgewählte wiederherstellen",
|
||||
"bulkRestored": "{{count}} Einträge wiederhergestellt",
|
||||
"bulkPartial": "{{succeeded}} wiederhergestellt, {{failed}} fehlgeschlagen",
|
||||
"bulkRestoreError": "Massen-Wiederherstellung fehlgeschlagen",
|
||||
"empty": "Papierkorb ist leer",
|
||||
"selectAll": "Alle auswählen",
|
||||
"selectItem": "Eintrag auswählen",
|
||||
"types": {
|
||||
"contact": "Kontakt",
|
||||
"task": "Aufgabe",
|
||||
"calendar_entry": "Kalendereintrag",
|
||||
"dms_file": "Datei",
|
||||
"mail": "E-Mail"
|
||||
}
|
||||
},
|
||||
"undoToast": {
|
||||
"undo": "Undo"
|
||||
},
|
||||
"userPreferences": {
|
||||
"title": "Benutzereinstellungen",
|
||||
|
||||
@@ -907,7 +907,39 @@
|
||||
"restoreError": "Restore failed",
|
||||
"empty": "No change history available",
|
||||
"changes": "Changes",
|
||||
"fieldsChanged": "fields changed"
|
||||
"fieldsChanged": "fields changed",
|
||||
"actionCreate": "Created",
|
||||
"actionUpdate": "Updated",
|
||||
"actionDelete": "Deleted"
|
||||
},
|
||||
"trash": {
|
||||
"title": "Trash",
|
||||
"allTypes": "All types",
|
||||
"filterType": "Entity type",
|
||||
"entityType": "Type",
|
||||
"name": "Name",
|
||||
"deletedAt": "Deleted at",
|
||||
"actions": "Actions",
|
||||
"restore": "Restore",
|
||||
"restored": "Restored",
|
||||
"restoreError": "Restore failed",
|
||||
"bulkRestore": "Restore selected",
|
||||
"bulkRestored": "{{count}} entries restored",
|
||||
"bulkPartial": "{{succeeded}} restored, {{failed}} failed",
|
||||
"bulkRestoreError": "Bulk restore failed",
|
||||
"empty": "Trash is empty",
|
||||
"selectAll": "Select all",
|
||||
"selectItem": "Select item",
|
||||
"types": {
|
||||
"contact": "Contact",
|
||||
"task": "Task",
|
||||
"calendar_entry": "Calendar entry",
|
||||
"dms_file": "File",
|
||||
"mail": "Email"
|
||||
}
|
||||
},
|
||||
"undoToast": {
|
||||
"undo": "Undo"
|
||||
},
|
||||
"userPreferences": {
|
||||
"title": "User Preferences",
|
||||
|
||||
Reference in New Issue
Block a user