From 005265b5a8e5ff8da3d8dacee9d911eee5a52455 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sat, 6 Jun 2026 15:36:13 +0200 Subject: [PATCH] feat(search): add NL search error codes and i18n strings Co-Authored-By: Claude Sonnet 4.6 --- .../org/raddatz/familienarchiv/exception/ErrorCode.java | 6 ++++++ frontend/messages/de.json | 3 +++ frontend/messages/en.json | 3 +++ frontend/messages/es.json | 3 +++ frontend/src/lib/shared/errors.ts | 6 ++++++ 5 files changed, 21 insertions(+) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/exception/ErrorCode.java b/backend/src/main/java/org/raddatz/familienarchiv/exception/ErrorCode.java index 3eb5287d..85d495d8 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/exception/ErrorCode.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/exception/ErrorCode.java @@ -135,6 +135,12 @@ public enum ErrorCode { /** The merge target is a descendant of the source tag. 400 */ TAG_MERGE_INVALID_TARGET, + // --- NL Search --- + /** Ollama is unreachable or timed out. 503 */ + SMART_SEARCH_UNAVAILABLE, + /** NL search rate limit exceeded (5 requests per user per minute). 429 */ + SMART_SEARCH_RATE_LIMITED, + // --- Generic --- /** Request validation failed (missing or malformed fields). 400 */ VALIDATION_ERROR, diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 32f6e464..946c39cc 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -22,6 +22,9 @@ "error_forbidden": "Sie haben keine Berechtigung für diese Aktion.", "error_csrf_token_missing": "Sitzungsfehler. Bitte laden Sie die Seite neu.", "error_too_many_login_attempts": "Zu viele Anmeldeversuche. Bitte versuchen Sie es später erneut.", + "error_smart_search_unavailable": "Die intelligente Suche ist momentan nicht verfügbar. Bitte nutze die normale Suche.", + "error_smart_search_rate_limited": "Du hast die Suchfunktion zu häufig genutzt. Bitte warte eine Minute.", + "smart_search_keywords_not_applied": "Schlüsselwörter konnten bei dieser Suche nicht berücksichtigt werden.", "error_validation_error": "Die Eingabe ist ungültig.", "error_internal_error": "Ein unerwarteter Fehler ist aufgetreten.", "nav_documents": "Dokumente", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 435860e1..6eb58fca 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -22,6 +22,9 @@ "error_forbidden": "You do not have permission for this action.", "error_csrf_token_missing": "Session error. Please reload the page.", "error_too_many_login_attempts": "Too many login attempts. Please try again later.", + "error_smart_search_unavailable": "The smart search is currently unavailable. Please use the regular search.", + "error_smart_search_rate_limited": "You have used the search function too frequently. Please wait a minute.", + "smart_search_keywords_not_applied": "Keywords could not be applied to this search.", "error_validation_error": "The input is invalid.", "error_internal_error": "An unexpected error occurred.", "nav_documents": "Documents", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 88e2affb..92fb90af 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -22,6 +22,9 @@ "error_forbidden": "No tiene permiso para realizar esta acción.", "error_csrf_token_missing": "Error de sesión. Recargue la página.", "error_too_many_login_attempts": "Demasiados intentos. Por favor, inténtelo más tarde.", + "error_smart_search_unavailable": "La búsqueda inteligente no está disponible en este momento. Por favor, usa la búsqueda normal.", + "error_smart_search_rate_limited": "Has utilizado la función de búsqueda demasiadas veces. Por favor, espera un minuto.", + "smart_search_keywords_not_applied": "Las palabras clave no pudieron aplicarse a esta búsqueda.", "error_validation_error": "La entrada no es válida.", "error_internal_error": "Se ha producido un error inesperado.", "nav_documents": "Documentos", diff --git a/frontend/src/lib/shared/errors.ts b/frontend/src/lib/shared/errors.ts index 6efec2a7..4bff75e6 100644 --- a/frontend/src/lib/shared/errors.ts +++ b/frontend/src/lib/shared/errors.ts @@ -53,6 +53,8 @@ export type ErrorCode = | 'FORBIDDEN' | 'CSRF_TOKEN_MISSING' | 'TOO_MANY_LOGIN_ATTEMPTS' + | 'SMART_SEARCH_UNAVAILABLE' + | 'SMART_SEARCH_RATE_LIMITED' | 'VALIDATION_ERROR' | 'BATCH_TOO_LARGE' | 'BULK_EDIT_TOO_MANY_IDS' @@ -178,6 +180,10 @@ export function getErrorMessage(code: ErrorCode | string | undefined): string { return m.error_csrf_token_missing(); case 'TOO_MANY_LOGIN_ATTEMPTS': return m.error_too_many_login_attempts(); + case 'SMART_SEARCH_UNAVAILABLE': + return m.error_smart_search_unavailable(); + case 'SMART_SEARCH_RATE_LIMITED': + return m.error_smart_search_rate_limited(); case 'VALIDATION_ERROR': return m.error_validation_error(); case 'BATCH_TOO_LARGE':