fixed notification system and added a new tenant notifications receipt table to track read status and filter messages by scope.

This commit is contained in:
Codex Agent
2025-12-17 10:57:19 +01:00
parent 0aae494945
commit d64839ba2f
31 changed files with 1089 additions and 127 deletions

View File

@@ -73,6 +73,12 @@
"photoLimit": "Für dieses Event ist das Foto-Upload-Limit erreicht.",
"goToBilling": "Zur Paketverwaltung"
},
"common": {
"loadMore": "Mehr laden",
"processing": "Verarbeite …",
"close": "Schließen",
"reset": "Zurücksetzen"
},
"limits": {
"photosTitle": "Foto-Limit",
"photosWarning": "Nur noch {{remaining}} von {{limit}} Foto-Uploads verfügbar.",

View File

@@ -149,6 +149,13 @@
"title": "Achtung",
"description": "Paket-Hinweise und Limits, die du im Blick behalten solltest."
},
"common": {
"all": "Alle",
"loadMore": "Mehr laden",
"processing": "Verarbeite …",
"close": "Schließen",
"reset": "Zurücksetzen"
},
"photos": {
"moderation": {
"title": "Fotos moderieren",
@@ -173,6 +180,7 @@
"all": "Alle",
"featured": "Highlights",
"hidden": "Versteckt",
"pending": "In Prüfung",
"photobooth": "Photobooth",
"search": "Uploads durchsuchen …",
"count": "{{count}} Uploads",
@@ -185,11 +193,77 @@
"show": "Einblenden",
"feature": "Als Highlight setzen",
"unfeature": "Highlight entfernen",
"approve": "Freigeben",
"approve": "Freigeben",
"delete": "Löschen",
"copy": "Link kopieren",
"copySuccess": "Link kopiert"
}
},
"limits": {
"photosBlocked": "Upload-Limit erreicht. Kaufe weitere Fotos, um fortzufahren.",
"photosWarning": "{{remaining}} von {{limit}} Fotos verbleiben.",
"guestsBlocked": "Gäste-Limit erreicht.",
"guestsWarning": "{{remaining}} von {{limit}} Gästen verbleiben.",
"galleryExpired": "Galerie abgelaufen. Verlängere die Laufzeit.",
"galleryWarningDay": "Galerie läuft in {{days}} Tag ab.",
"galleryWarningDays": "Galerie läuft in {{days}} Tagen ab.",
"buyMorePhotos": "Mehr Fotos freischalten",
"extendGallery": "Galerie verlängern",
"buyMoreGuests": "Mehr Gäste freischalten"
},
"notificationLogs": {
"photoLimit": {
"title": "Foto-Limit erreicht",
"body": "{{event}} hat das Foto-Limit von {{limit}} erreicht."
},
"guestLimit": {
"title": "Gäste-Limit erreicht",
"body": "{{event}} hat das Gäste-Limit von {{limit}} erreicht."
},
"eventLimit": {
"title": "Event-Kontingent erreicht",
"body": "Dein Paket erlaubt keine weiteren Events. Limit: {{limit}}."
},
"galleryWarning": {
"title": "Galerie läuft bald ab",
"body": "{{event}} läuft in {{days}} Tagen ab."
},
"galleryExpired": {
"title": "Galerie abgelaufen",
"body": "Galerie von {{event}} ist offline. Verlängern zum Reaktivieren."
},
"photoThreshold": {
"title": "Foto-Nutzung Warnung",
"body": "{{event}} liegt bei {{used}} / {{limit}} Fotos."
},
"guestThreshold": {
"title": "Gäste-Nutzung Warnung",
"body": "{{event}} liegt bei {{used}} / {{limit}} Gästen."
},
"generic": {
"body": "Benachrichtigung über {{channel}}."
},
"filterEmpty": "Keine Benachrichtigungen für dieses Event.",
"clearFilter": "Alle Benachrichtigungen anzeigen",
"filter": {
"unread": "Ungelesen",
"read": "Gelesen",
"all": "Alle"
},
"scope": {
"all": "Alle Bereiche",
"photos": "Fotos",
"guests": "Gäste",
"gallery": "Galerie",
"events": "Events",
"package": "Paket",
"general": "Allgemein"
},
"markAllRead": "Alle als gelesen markieren",
"markFailed": "Benachrichtigungen konnten nicht aktualisiert werden.",
"unread": "Ungelesen"
},
"events": {
"detail": {
"kpi": {
@@ -564,6 +638,9 @@
"eventTasks": {
"title": "Aufgaben & Missionen",
"subtitle": "Stelle Mission Cards und Aufgaben für dieses Event zusammen.",
"search": "Aufgaben suchen",
"emotionFilter": "Emotionen filtern",
"allEmotions": "Alle",
"actions": {
"back": "Zurück zur Übersicht",
"assign": "Ausgewählte Tasks zuweisen"
@@ -579,6 +656,8 @@
"emotions": {
"error": "Emotionen konnten nicht geladen werden."
},
"manageEmotions": "Emotionen verwalten",
"manageEmotionsHint": "Filtere und halte deine Taxonomie sauber.",
"alerts": {
"notFoundTitle": "Event nicht gefunden",
"notFoundDescription": "Bitte kehre zur Eventliste zurück."
@@ -1819,7 +1898,9 @@
"visibilityFailed": "Sichtbarkeit konnte nicht geändert werden.",
"featureSuccess": "Als Highlight markiert",
"unfeatureSuccess": "Highlight entfernt",
"featureFailed": "Highlight konnte nicht geändert werden."
"featureFailed": "Highlight konnte nicht geändert werden.",
"approveSuccess": "Foto freigegeben",
"approveFailed": "Freigabe fehlgeschlagen."
},
"mobileProfile": {
"title": "Profil",
@@ -1952,6 +2033,7 @@
"mobileNotifications": {
"title": "Benachrichtigungen",
"empty": "Keine Benachrichtigungen vorhanden.",
"filterByEvent": "Nach Event filtern"
"filterByEvent": "Nach Event filtern",
"unknownEvent": "Event"
}
}

View File

@@ -73,6 +73,12 @@
"photoLimit": "This event reached its photo upload limit.",
"goToBilling": "Manage subscription"
},
"common": {
"loadMore": "Load more",
"processing": "Processing…",
"close": "Close",
"reset": "Reset"
},
"limits": {
"photosTitle": "Photo limit",
"photosWarning": "Only {{remaining}} of {{limit}} photo uploads remaining.",

View File

@@ -145,6 +145,13 @@
}
}
},
"common": {
"all": "All",
"loadMore": "Load more",
"processing": "Processing…",
"close": "Close",
"reset": "Reset"
},
"photos": {
"moderation": {
"title": "Moderate photos",
@@ -169,6 +176,7 @@
"all": "All",
"featured": "Highlights",
"hidden": "Hidden",
"pending": "Pending",
"photobooth": "Photobooth",
"search": "Search uploads …",
"count": "{{count}} uploads",
@@ -181,11 +189,76 @@
"show": "Show",
"feature": "Set highlight",
"unfeature": "Remove highlight",
"approve": "Approve",
"delete": "Delete",
"copy": "Copy link",
"copySuccess": "Link copied"
}
},
"limits": {
"photosBlocked": "Upload limit reached. Buy more photos to continue.",
"photosWarning": "{{remaining}} of {{limit}} photos remaining.",
"guestsBlocked": "Guest limit reached.",
"guestsWarning": "{{remaining}} of {{limit}} guests remaining.",
"galleryExpired": "Gallery expired. Extend to keep it online.",
"galleryWarningDay": "Gallery expires in {{days}} day.",
"galleryWarningDays": "Gallery expires in {{days}} days.",
"buyMorePhotos": "Buy more photos",
"extendGallery": "Extend gallery",
"buyMoreGuests": "Add more guests"
},
"notificationLogs": {
"photoLimit": {
"title": "Photo limit reached",
"body": "{{event}} reached its photo limit of {{limit}}."
},
"guestLimit": {
"title": "Guest limit reached",
"body": "{{event}} reached its guest limit of {{limit}}."
},
"eventLimit": {
"title": "Event quota reached",
"body": "Your package allows no more events. Limit: {{limit}}."
},
"galleryWarning": {
"title": "Gallery expiring soon",
"body": "{{event}} expires in {{days}} days."
},
"galleryExpired": {
"title": "Gallery expired",
"body": "{{event}} gallery is offline. Extend to reactivate."
},
"photoThreshold": {
"title": "Photo usage warning",
"body": "{{event}} is at {{used}} / {{limit}} photos."
},
"guestThreshold": {
"title": "Guest usage warning",
"body": "{{event}} is at {{used}} / {{limit}} guests."
},
"generic": {
"body": "Notification sent via {{channel}}."
},
"filterEmpty": "No notifications for this event.",
"clearFilter": "Show all notifications",
"filter": {
"unread": "Unread",
"read": "Read",
"all": "All"
},
"scope": {
"all": "All scopes",
"photos": "Photos",
"guests": "Guests",
"gallery": "Gallery",
"events": "Events",
"package": "Package",
"general": "General"
},
"markAllRead": "Mark all read",
"markFailed": "Could not update notifications.",
"unread": "Unread"
},
"events": {
"detail": {
"kpi": {
@@ -312,6 +385,9 @@
"eventTasks": {
"title": "Tasks & missions",
"subtitle": "Curate mission cards and tasks for this event.",
"search": "Search tasks",
"emotionFilter": "Emotion filter",
"allEmotions": "All",
"actions": {
"back": "Back to overview",
"assign": "Assign selected tasks"
@@ -327,6 +403,8 @@
"emotions": {
"error": "Could not load emotions."
},
"manageEmotions": "Manage emotions",
"manageEmotionsHint": "Filter and keep your taxonomy tidy.",
"alerts": {
"notFoundTitle": "Event not found",
"notFoundDescription": "Please return to the event list."
@@ -1840,7 +1918,9 @@
"visibilityFailed": "Visibility could not be changed.",
"featureSuccess": "Marked as highlight",
"unfeatureSuccess": "Highlight removed",
"featureFailed": "Highlight could not be changed"
"featureFailed": "Highlight could not be changed",
"approveSuccess": "Photo approved",
"approveFailed": "Approval failed."
},
"mobileProfile": {
"title": "Profile",
@@ -1973,6 +2053,7 @@
"mobileNotifications": {
"title": "Notifications",
"empty": "No notifications yet.",
"filterByEvent": "Filter by event"
"filterByEvent": "Filter by event",
"unknownEvent": "Event"
}
}