# Fehlercode-System - Verwendungsanleitung

## Übersicht

Das Fehlercode-System ersetzt hardcodierte deutsche Fehlermeldungen durch strukturierte Fehlercodes, die im Frontend übersetzt werden.

## Backend-Verwendung

### 1. Fehlercode verwenden

```javascript
import HttpError from '../exceptions/HttpError.js';
import { ERROR_CODES, createError } from '../constants/errorCodes.js';

// Einfacher Fehlercode ohne Parameter
throw new HttpError(createError(ERROR_CODES.USER_NOT_FOUND), 404);

// Fehlercode mit Parametern
throw new HttpError(
  createError(ERROR_CODES.MEMBER_NOT_FOUND, { memberId: 123 }), 
  404
);

// Oder direkt:
throw new HttpError(
  { code: ERROR_CODES.MEMBER_NOT_FOUND, params: { memberId: 123 } }, 
  404
);
```

### 2. Legacy-Format (wird weiterhin unterstützt)

```javascript
// Alte Variante funktioniert noch:
throw new HttpError('Benutzer nicht gefunden', 404);
```

## Frontend-Verwendung

### 1. Fehlermeldungen automatisch übersetzen

Die `getSafeErrorMessage`-Funktion erkennt automatisch Fehlercodes:

```javascript
import { getSafeErrorMessage } from '../utils/errorMessages.js';

// In einer Vue-Komponente (Options API)
try {
  await apiClient.post('/api/endpoint', data);
} catch (error) {
  const message = getSafeErrorMessage(error, this.$t('errors.ERROR_UNKNOWN_ERROR'), this.$t);
  await this.showInfo(this.$t('messages.error'), message, '', 'error');
}

// In einer Vue-Komponente (Composition API)
import { useI18n } from 'vue-i18n';
const { t } = useI18n();

try {
  await apiClient.post('/api/endpoint', data);
} catch (error) {
  const message = getSafeErrorMessage(error, t('errors.ERROR_UNKNOWN_ERROR'), t);
  await showInfo(t('messages.error'), message, '', 'error');
}
```

### 2. Dialog-Utils mit Übersetzung

```javascript
import { buildInfoConfig, safeErrorMessage } from '../utils/dialogUtils.js';

// Mit Übersetzungsfunktion
this.infoDialog = buildInfoConfig({
  title: this.$t('messages.error'),
  message: safeErrorMessage(error, this.$t('errors.ERROR_UNKNOWN_ERROR'), this.$t),
  type: 'error'
}, this.$t);
```

## API-Response-Format

### Neues Format (mit Fehlercode):
```json
{
  "success": false,
  "code": "ERROR_MEMBER_NOT_FOUND",
  "params": {
    "memberId": 123
  },
  "error": "ERROR_MEMBER_NOT_FOUND"  // Für Rückwärtskompatibilität
}
```

### Legacy-Format (wird weiterhin unterstützt):
```json
{
  "success": false,
  "message": "Mitglied nicht gefunden",
  "error": "Mitglied nicht gefunden"
}
```

## Übersetzungen hinzufügen

1. **Backend**: Fehlercode in `backend/constants/errorCodes.js` definieren
2. **Frontend**: Übersetzung in `frontend/src/i18n/locales/de.json` unter `errors` hinzufügen

Beispiel:
```json
{
  "errors": {
    "ERROR_MEMBER_NOT_FOUND": "Mitglied nicht gefunden.",
    "ERROR_MEMBER_NOT_FOUND_WITH_ID": "Mitglied mit ID {memberId} nicht gefunden."
  }
}
```

## Migration bestehender Fehler

1. Hardcodierte Fehlermeldung identifizieren
2. Passenden Fehlercode in `errorCodes.js` finden oder erstellen
3. Backend-Code anpassen: `throw new HttpError(createError(ERROR_CODES.XXX), status)`
4. Übersetzung in `de.json` hinzufügen
5. Frontend-Code muss nicht geändert werden (automatische Erkennung)

