Zum Hauptinhalt springen

Change user status (Admin only)

POST 

/company/users/status/:id

Ändere den Status eines Benutzers (aktivieren/deaktivieren) über das Feld status. Nur Administratoren können den Status von Benutzern ändern.

Ziel

Administratoren ermöglichen, den Zugang von Benutzern zur Plattform zu steuern durch Aktivieren/Deaktivieren von Konten.

Anwendungsfälle

  • Einen Benutzer vorübergehend deaktivieren
  • Einen Benutzer aktivieren, der deaktiviert war
  • Zugang aus Sicherheitsgründen sperren
  • Benutzer wegen Zahlungsverzugs oder Vertragsverletzung blockieren

Authentifizierung & Autorisierung

  • Erfordert gültiges JWT (Middleware m.isLoged)
  • Erfordert Admin- oder Dev-Rolle (Middleware m.isAdmin)

Verhalten

  • reason = NONE: Aktiviert Benutzer (status = true), löscht reason, reasonDate, reasonMessage
  • reason ≠ NONE: Deaktiviert Benutzer (status = false), setzt reason und reasonMessage
  • Validiert Grund mit model.isValidReason()
  • Aktualisiert reasonDate, wenn gültig (ISO8601-Format)

Gültige Gründe

  • NONE: Normaler aktiver Benutzer ohne Vorfälle (aktiviert Benutzer)
  • BAD_USER: Wegen Fehlverhaltens gesperrt (Meldungen, Betrug)
  • PENDING: Registrierung abgeschlossen, wartet auf Aktivierung
  • ACTIVE: Benutzer verifiziert und betriebsbereit
  • BLOCKED: Administrativ gesperrt (Zahlungsverzug, Sicherheit)

Validierungsablauf

flowchart TD
A[POST /status/:id empfangen] --> B\{Benutzer Admin?\}
B -->|Nein| C[403 Forbidden]
B -->|Ja| D\{Benutzer existiert?\}
D -->|Nein| E[404 Not Found]
D -->|Ja| F\{Reason === 'NONE'?\}
F -->|Ja| G[Benutzer aktivieren]
G --> H[status = true]
H --> I

<Heading
id={"request"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Request"}
>
</Heading>

<ParamsDetails
parameters={[{"name":"id","in":"path","required":true,"description":"ID des Benutzers, dessen Status geändert wird","schema":{"type":"string","pattern":"^[a-f0-9]{24}$","example":"63d7907cbe76403b35da63df"}}]}
>

</ParamsDetails>

<RequestSchema
title={"Body"}
body={{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","enum":["NONE","BAD_USER","PENDING","ACTIVE","BLOCKED"],"description":"Grund für die Statusänderung. Bei NONE wird der Benutzer aktiviert.\nJeder andere Wert deaktiviert den Benutzer.","example":"NONE"},"reasonDate":{"type":"string","format":"date-time","description":"Datum/Zeit des Statuswechsels (optional). Wenn nicht angegeben,\nwird das aktuelle Datum verwendet. ISO8601-Format.","example":"2025-02-12T14:30:00.000Z","nullable":true},"reasonMessage":{"type":"string","maxLength":500,"description":"Erklärende Nachricht zum Statuswechsel (optional).\nSichtbar für Benutzer und Administratoren.","example":"Usuario bloqueado temporalmente por verificación de documentación","nullable":true}}},"example":{"reason":"NONE","reasonDate":"2025-02-12T14:30:00.000Z","reasonMessage":"Usuario reactivado tras completar verificación"}}}}}
>

</RequestSchema>

<StatusCodes
id={undefined}
label={undefined}
responses={{"200":{"description":"Benutzerstatus erfolgreich geändert","content":{"application/json":{"schema":{"type":"object","description":"Stellt einen Unternehmensnutzer (company_user) mit Zugang zur Cargoffer-Plattform dar.\n**Funktionalität**: - Angestellter eines Transportunternehmens, der Auktionen, Lieferungen und Dokumentation verwaltet - Authentifizierung via JWT (Token mit konfigurierbarer Ablaufzeit gemäß refresh_time) - Hierarchisches Rollensystem: dev > admin > manager (absteigende Berechtigungen) - Einem Unternehmen zugeordnet (company.users-Array enthält Referenzen auf _id von Nutzern)\n**Modell**: `src/features/models/company_user.model.js`\n**Controller**: - `src/features/company/users/company_user.account.controller.js` (CRUD, Passwörter) - `src/features/company/users/company_user.profile.controller.js` (Profil, Präferenzen) - `src/features/company/auth/auth.account.controller.js` (Login, Token)\n**Middleware**: `src/features/common/middleware/company.middleware.js` - `m.isLoged` - Prüft gültiges JWT - `m.isGestor` - Erfordert Rolle 'manager' oder höher - `m.isAdmin` - Erfordert Rolle 'admin' oder 'dev'","properties":{"_id":{"type":"string","description":"MongoDB eindeutige Benutzerkennung (24 hexadezimale Zeichen). Wird automatisch bei der Registrierung generiert. Referenziert in: company.users[], auction.user, delivery.user, notifications.user. Im JWT-Payload als Claim '_id' enthalten.","pattern":"^[a-f0-9]{24}$","example":"63d7907cbe76403b35da63df"},"email":{"type":"string","format":"email","description":"Eindeutige E-Mail-Adresse des Benutzers (wird für die Anmeldung verwendet). **Erforderlich** - Eindeutig in der Datenbank (Unique-Index in der Produktion). Wird automatisch in Kleinbuchstaben normalisiert (Pre-Save-Hook). Verwendung bei: Authentifizierung, Passwortwiederherstellung, Benachrichtigungen. Wird mit dem Standard-E-Mail-Format validiert.","example":"usuario@cargoffer.com"},"name":{"type":"string","description":"Name des Benutzers (firstName im internationalen Kontext). Verwendet in: Benutzeroberfläche, CMR-Dokumentenunterschrift, Identifikation in Benachrichtigungen. Mindestens 2 Zeichen (Validierung im Frontend).","minLength":2,"maxLength":50,"example":"Juan"},"lastname":{"type":"string","description":"Nachname des Benutzers (lastName in der API, lastname im Modell). Wird zusammen mit 'name' für die vollständige Identifikation in offiziellen Dokumenten verwendet. Verkettet in: Verträgen, CMR, Rechnungen.","minLength":2,"maxLength":100,"example":"García López"},"role":{"type":"string","enum":["dev","admin","gestor"],"description":"Rolle des Benutzers, die Berechtigungen auf der Plattform definiert. \n**dev**: Vollzugriff + Debugging + Verwaltung aller Unternehmen (Superadmin) \n**admin**: Vollständige Verwaltung des eigenen Unternehmens (Benutzer erstellen, Abrechnung einsehen, Daten ändern) \n**gestor**: Tägliche Operationen (Auktionen/Lieferungen erstellen, Dashboard einsehen, eigenes Profil bearbeiten) \n\n**Middleware-Prüfungen**: \n- m.isGestor akzeptiert: ['gestor', 'admin', 'dev'] \n- m.isAdmin akzeptiert: ['admin', 'dev'] \n\nIm JWT-Payload gespeichert (wird für die Berechtigungsvalidierung verwendet).","default":"gestor","example":"admin"},"status":{"type":"boolean","description":"Aktiv/Inaktiv-Status des Benutzers. **true**: Benutzer kann sich einloggen und normal arbeiten. **false**: Benutzer gesperrt (kann sich nicht einloggen, JWTs ungültig). \nVerwendet in: Middleware m.isLoged prüft status=true, bevor Zugriff erlaubt wird. Geändert über: POST /company/users/status/:id (nur Admin). Unterscheidet sich von 'deleted' (Soft Delete) – dies ist eine reversible Sperrung.","default":true,"example":true},"reason":{"type":"string","enum":["NONE","BAD_USER","PENDING","ACTIVE","BLOCKED"],"description":"Benutzerstatus-Grundcode. **NONE**: Normaler aktiver Nutzer ohne Vorkommnisse **PENDING**: Registrierung abgeschlossen, wartet auf E-Mail-Aktivierung **ACTIVE**: Nutzer verifiziert und betriebsbereit **BAD_USER**: Wegen Fehlverhaltens gesperrt (Meldungen, Betrug) **BLOCKED**: Administrativ gesperrt (Zahlungsverzug, Sicherheit)\nWird zusammen mit 'status' und 'reasonMessage' für die Auditierung verwendet. Wird mit 'reasonDate' (Zeitstempel der Änderung) gespeichert.","default":"NONE","example":"ACTIVE"},"reasonMessage":{"type":"string","description":"Beschreibende Nachricht zum Grund der Sperrung/aktuellen Status. Optional – Vom Admin ausgefüllt, wenn der Status auf 'false' geändert wird. Sichtbar für: Admins im Benutzerpanel, gesperrter Benutzer in der Login-Fehlermeldung. Beispiel: 'Konto wegen Zahlungsrückstands gesperrt', 'Benutzer wegen regelwidrigen Verhaltens gemeldet'.","example":"Usuario bloqueado temporalmente por verificación de documentación"},"reasonDate":{"type":"string","format":"date-time","description":"Zeitstempel, wann das Feld 'reason' zuletzt geändert wurde. Automatisch – Wird im Pre-Save-Hook gesetzt, wenn eine Änderung an 'reason' erkannt wird. Verwendung in: Auditierung, Berechnung der Blockierdauer, Änderungshistorien.","example":"2025-01-15T14:30:00.000Z"},"i18n":{"type":"string","enum":["es","en","fr","de"],"description":"Bevorzugter Sprachcode des Benutzers (Internationalisierung). **es**: Spanisch (Standard für Spanien) **en**: Englisch (internationaler Standard)\nVerwendet in: automatischen E-Mails, Benutzeroberfläche, Fehlermeldungen, CMR-Dokumenten. Im JWT-Payload für Backend-Personalisierung gespeichert. Geändert über: POST /company/users/lang","default":"es","example":"en"},"birthDate":{"type":"string","format":"date-time","description":"Geburtsdatum des Benutzers (optional). Verwendung: Altersüberprüfungen (Mindestalter 18 Jahre für Fahrer), demografische Statistiken. ISO 8601-Format. Kann null sein.","nullable":true,"example":"1990-05-15T00:00:00.000Z"},"emailVerified":{"type":"boolean","description":"Gibt an, ob der Benutzer seine E-Mail-Adresse verifiziert hat. **false**: Benutzer registriert, hat aber nicht auf den Aktivierungslink geklickt **true**: E-Mail über Aktivierungstoken bestätigt\nAblauf: register → E-Mail mit Token → GET /company/auth/activate/:token → emailVerified=true Benutzer mit emailVerified=false können eingeschränkte Funktionen haben (abhängig von der Konfiguration).","default":false,"example":true},"emailVerifiedDate":{"type":"string","format":"date-time","description":"Zeitstempel, wann die E-Mail verifiziert wurde (null, wenn emailVerified=false). Automatisch gesetzt bei Bestätigung des Aktivierungstokens. Verwendet für: Auditierung, Berechnung der Zeit seit der Verifizierung, Anforderungen für eine erneute Verifizierung.","nullable":true,"example":"2025-01-10T09:20:30.000Z"},"phone":{"type":"string","description":"Telefonnummer des Benutzers (optional, aber empfohlen). Format: international bevorzugt (+Ländercode), mindestens 9 Ziffern, maximal 15. Verwendung: logistische Koordination, SMS-Benachrichtigungen, Notfallkontakt. Validierung: `minlength: 9, maxlength: 15` im Modell.","pattern":"^\\+?[0-9]{9,15}$","example":"+34612345678"},"lastSignInAt":{"type":"string","format":"date-time","description":"Zeitstempel der letzten erfolgreichen Anmeldung des Benutzers. Automatisch aktualisiert im Login-Controller (POST /company/auth/login). Verwendet in: Aktivitäts-Dashboard, Erkennung inaktiver Konten, Sicherheitsaudit.","example":"2025-10-23T08:15:45.000Z"},"lastSignInIp":{"type":"string","description":"IP-Adresse, von der aus die letzte Anmeldung erfolgte. Entnommen aus req.ip oder req.headers['x-forwarded-for']. Verwendung bei: Erkennung verdächtiger Zugriffe, Sicherheitsprotokollen, Geolokalisierung von Zugriffen.","format":"ipv4","example":"192.168.1.100"},"country":{"type":"string","description":"ISO 3166-1 alpha-3-Ländercode des Benutzers (3 Kleinbuchstaben). Verwendet in: Zeitzonenfiltern, Datumsformaten, Gebietsschema-Einstellungen, TaxID-Validierungen. Standard: esp (Spanien). Muss in der Collection 'countries' vorhanden sein.","pattern":"^[a-z]{3}$","default":"esp","example":"esp"},"timezone":{"type":"string","description":"Zeitzone des Benutzers im IANA Time Zone Database-Format. Verwendet für: Umwandlung von UTC-Zeitstempeln in Ortszeit, Datumsanzeige, Berechnung von Lade-/Entladezeiten. Muss mit gültigen Zonen der moment-timezone-Bibliothek übereinstimmen. Standard: Europe/Madrid","default":"Europe/Madrid","example":"Europe/Madrid"},"taxid":{"type":"string","description":"Persönliche Steueridentifikationsnummer (NIF, DNI, NIE, etc.). **Eindeutig in der Produktion** (Unique-Index). Mindestens 6 Zeichen, maximal 9. Automatisch in Großbuchstaben normalisiert (uppercase: true im Modell). Verwendet in: Rechnungsstellung, Verträgen, rechtlicher Dokumentation. Temporärer Standardwert: '---------' (9 Bindestriche), um Erstellung ohne Angabe zu ermöglichen.","minLength":6,"maxLength":9,"example":"12345678A"},"img":{"type":"string","format":"uri","description":"URL des Profilbildes des Benutzers (gespeichert in AWS S3). Optional - Hochgeladen über den Dokumenten-Endpunkt mit multerS3. Verwendung: Avatar in der Benutzeroberfläche, visuelle Signatur in Dokumenten. Format: Vollständige S3-Bucket-URL.","nullable":true,"example":"https://cargoffer-storage.s3.amazonaws.com/users/63d7907cbe76403b35da63df.jpg"},"recovery_token":{"type":"string","description":"Temporäres Token zur Passwortwiederherstellung (Hash). \nGeneriert bei: POST /company/auth/recovery (Reset-Anfrage) \nVerwendet bei: GET /company/auth/recovery/:token (Token-Validierung) \nBereinigt nach: Erfolgreicher Passwortänderung oder Ablauf (48h) \nStandard: '' (Leerstring, wenn kein aktiver Wiederherstellungsprozess läuft)","example":"a7f5e8d3c2b9..."},"refresh_time":{"type":"integer","enum":[1,3,5,10],"description":"Gültigkeitsdauer des JWT in Tagen. Verwendet in: Token-Generierung (exp claim = iat + refresh_time * 24h). **1**: Maximale Sicherheit (tägliches Re-Login) - Für sensible Rollen **3**: Standard-Kompromiss Sicherheit/Komfort **5**: Häufige Nutzung **10**: Mobile Apps mit Offline-Funktion\nIm JWT-Payload gespeichert, im Middleware m.isLoged validiert.","default":3,"example":3},"is_bot":{"type":"boolean","description":"Gibt an, ob der Benutzer ein automatisierter Bot ist (für API-Integrationen). **true**: Benutzer für automatische Integration erstellt (Webhooks, Skripte) **false**: Menschlicher, echter Benutzer\nVerwendet in: Statistiken, Auditierung, Ausschluss von Bots aus Metriken menschlicher Aktivität. Bots können spezielle Berechtigungen und andere Rate Limits haben.","default":false,"example":false},"deleted":{"type":"boolean","description":"Flag für Soft Delete (mongoose-delete Plugin). **false**: Benutzer aktiv **true**: Benutzer gelöscht (erscheint nicht in normalen Queries). \nQueries schließen automatisch deleted:false ein (Plugin overrideMethods:true). Wiederherstellbar über: POST /company/users/disabled/reactivate/:id. Verknüpft mit 'deletedAt'-Zeitstempel.","default":false,"example":false},"deletedAt":{"type":"string","format":"date-time","description":"Zeitstempel, wann der Benutzer gelöscht wurde (Soft Delete). Null, wenn deleted=false. Automatisch vom mongoose-delete-Plugin gesetzt. Verwendet für: Löschungsaudit, Benutzerwiederherstellung, GDPR-Compliance.","nullable":true,"example":"2025-10-01T12:00:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Zeitstempel der Benutzererstellung (automatisch durch mongoose timestamps). Unveränderlich – kann nach der Erstellung nicht geändert werden. Verwendet in: Sortierung, Wachstumsstatistiken, Auditierung.","example":"2024-12-01T10:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Zeitstempel der letzten Benutzeränderung (automatisch durch mongoose timestamps). Wird bei jedem save() aktualisiert – spiegelt die letzte Bearbeitung eines beliebigen Feldes wider. Verwendet für: Synchronisierung, Cache-Invalidierung, Änderungserkennung.","example":"2025-10-20T15:45:30.000Z"},"lastAccess":{"type":"string","format":"date-time","description":"Zeitstempel des letzten registrierten Zugriffs auf jeden authentifizierten Endpunkt. Aktualisiert durch: Middleware m.getAction bei jeder authentifizierten Anfrage. Unterscheidet sich von lastSignInAt (dieser wird bei jeder Anfrage aktualisiert, nicht nur beim Login). Verwendet für: Erkennung von Inaktivität, Engagement-Metriken.","example":"2025-10-23T10:22:15.000Z"}},"title":"User"},"example":{"_id":"63d7907cbe76403b35da63df","email":"usuario@empresa.com","name":"Juan","lastname":"Pérez García","status":true,"reason":"NONE","reasonDate":null,"reasonMessage":null,"updatedAt":"2025-02-12T14:30:00.000Z"}}}},"400":{"description":"Ungültige Anfrage. Mögliche Ursachen:\n- Ungültiger Grund\n- Fehler beim Speichern","content":{"application/json":{"schema":{"type":"object","required":["status","message"],"properties":{"status":{"type":"integer","description":"HTTP-Statuscode","minimum":400,"maximum":599,"example":400},"message":{"type":"string","description":"Fehlercode vom System.\n\nHäufige Fehlercodes (siehe listado_errores_http.txt für die vollständige Liste):\n- NO_TOKEN (401): JWT-Token nicht bereitgestellt\n- TOKEN_NOT_VALID (401): JWT-Token ist ungültig oder abgelaufen\n- NO_ADMIN_ROLE (401): Benutzer verfügt nicht über Administratorrechte\n- INVALID_PARAMETERS (400): Anforderungsparameter sind ungültig\n- NOT_FOUND (404): Angeforderte Ressource nicht gefunden\n- ALREADY_EXIST (401): Ressource mit gleichem Bezeichner existiert bereits\n- UTC_VALIDATION_FAILED (400): UTC-Zeitstempelvalidierung fehlgeschlagen\n- INTERNAL_ERROR (500): Unerwarteter Serverfehler ist aufgetreten\n\nDie Nachricht wird von `handlerError.getErrorMessage(error)` aufgelöst.","example":"INVALID_PARAMETERS"}},"description":"Standardisierte Fehlerantworten für alle API-Endpunkte.\n\nAlle Fehler folgen dem Schema `{status: number, message: string}`.\nDer Statuscode wird sowohl in der HTTP-Antwort als auch im Antwortkörper wiederholt.\n\nFehlermeldungen sind Konstanten im Code und sollten clientseitig\nmit entsprechenden, benutzerfreundlichen Meldungen behandelt werden.","example":{"status":400,"message":"INVALID_PARAMETERS"},"title":"ErrorResponse"},"example":{"message":"FORM_DATA_NOT_VALID"}}}},"401":{"description":"Nicht autorisiert (Admin- oder Dev-Rolle erforderlich)","content":{"application/json":{"schema":{"type":"object","required":["status","message"],"properties":{"status":{"type":"integer","description":"HTTP-Statuscode","minimum":400,"maximum":599,"example":400},"message":{"type":"string","description":"Fehlercode vom System.\n\nHäufige Fehlercodes (siehe listado_errores_http.txt für die vollständige Liste):\n- NO_TOKEN (401): JWT-Token nicht bereitgestellt\n- TOKEN_NOT_VALID (401): JWT-Token ist ungültig oder abgelaufen\n- NO_ADMIN_ROLE (401): Benutzer verfügt nicht über Administratorrechte\n- INVALID_PARAMETERS (400): Anforderungsparameter sind ungültig\n- NOT_FOUND (404): Angeforderte Ressource nicht gefunden\n- ALREADY_EXIST (401): Ressource mit gleichem Bezeichner existiert bereits\n- UTC_VALIDATION_FAILED (400): UTC-Zeitstempelvalidierung fehlgeschlagen\n- INTERNAL_ERROR (500): Unerwarteter Serverfehler ist aufgetreten\n\nDie Nachricht wird von `handlerError.getErrorMessage(error)` aufgelöst.","example":"INVALID_PARAMETERS"}},"description":"Standardisierte Fehlerantworten für alle API-Endpunkte.\n\nAlle Fehler folgen dem Schema `{status: number, message: string}`.\nDer Statuscode wird sowohl in der HTTP-Antwort als auch im Antwortkörper wiederholt.\n\nFehlermeldungen sind Konstanten im Code und sollten clientseitig\nmit entsprechenden, benutzerfreundlichen Meldungen behandelt werden.","example":{"status":400,"message":"INVALID_PARAMETERS"},"title":"ErrorResponse"},"example":{"message":"NO_TOKEN"}}}},"403":{"description":"Verboten (Benutzer ist kein Administrator)","content":{"application/json":{"schema":{"type":"object","required":["status","message"],"properties":{"status":{"type":"integer","description":"HTTP-Statuscode","minimum":400,"maximum":599,"example":400},"message":{"type":"string","description":"Fehlercode vom System.\n\nHäufige Fehlercodes (siehe listado_errores_http.txt für die vollständige Liste):\n- NO_TOKEN (401): JWT-Token nicht bereitgestellt\n- TOKEN_NOT_VALID (401): JWT-Token ist ungültig oder abgelaufen\n- NO_ADMIN_ROLE (401): Benutzer verfügt nicht über Administratorrechte\n- INVALID_PARAMETERS (400): Anforderungsparameter sind ungültig\n- NOT_FOUND (404): Angeforderte Ressource nicht gefunden\n- ALREADY_EXIST (401): Ressource mit gleichem Bezeichner existiert bereits\n- UTC_VALIDATION_FAILED (400): UTC-Zeitstempelvalidierung fehlgeschlagen\n- INTERNAL_ERROR (500): Unerwarteter Serverfehler ist aufgetreten\n\nDie Nachricht wird von `handlerError.getErrorMessage(error)` aufgelöst.","example":"INVALID_PARAMETERS"}},"description":"Standardisierte Fehlerantworten für alle API-Endpunkte.\n\nAlle Fehler folgen dem Schema `{status: number, message: string}`.\nDer Statuscode wird sowohl in der HTTP-Antwort als auch im Antwortkörper wiederholt.\n\nFehlermeldungen sind Konstanten im Code und sollten clientseitig\nmit entsprechenden, benutzerfreundlichen Meldungen behandelt werden.","example":{"status":400,"message":"INVALID_PARAMETERS"},"title":"ErrorResponse"},"example":{"message":"USER_NOT_ALLOWED"}}}},"404":{"description":"Benutzer nicht gefunden.","content":{"application/json":{"schema":{"type":"object","required":["status","message"],"properties":{"status":{"type":"integer","description":"HTTP-Statuscode","minimum":400,"maximum":599,"example":400},"message":{"type":"string","description":"Fehlercode vom System.\n\nHäufige Fehlercodes (siehe listado_errores_http.txt für die vollständige Liste):\n- NO_TOKEN (401): JWT-Token nicht bereitgestellt\n- TOKEN_NOT_VALID (401): JWT-Token ist ungültig oder abgelaufen\n- NO_ADMIN_ROLE (401): Benutzer verfügt nicht über Administratorrechte\n- INVALID_PARAMETERS (400): Anforderungsparameter sind ungültig\n- NOT_FOUND (404): Angeforderte Ressource nicht gefunden\n- ALREADY_EXIST (401): Ressource mit gleichem Bezeichner existiert bereits\n- UTC_VALIDATION_FAILED (400): UTC-Zeitstempelvalidierung fehlgeschlagen\n- INTERNAL_ERROR (500): Unerwarteter Serverfehler ist aufgetreten\n\nDie Nachricht wird von `handlerError.getErrorMessage(error)` aufgelöst.","example":"INVALID_PARAMETERS"}},"description":"Standardisierte Fehlerantworten für alle API-Endpunkte.\n\nAlle Fehler folgen dem Schema `{status: number, message: string}`.\nDer Statuscode wird sowohl in der HTTP-Antwort als auch im Antwortkörper wiederholt.\n\nFehlermeldungen sind Konstanten im Code und sollten clientseitig\nmit entsprechenden, benutzerfreundlichen Meldungen behandelt werden.","example":{"status":400,"message":"INVALID_PARAMETERS"},"title":"ErrorResponse"},"example":{"message":"USER_NOT_FOUND"}}}}}}
>

</StatusCodes>