Kunden API

Kundendaten über die REST API abrufen und verwalten.

Zuletzt aktualisiert: 2025-01-01

Kunden API

Die Kunden-API ermöglicht das Abrufen und Verwalten von registrierten Kunden und Gastbestellern. Alle Endpunkte erfordern Admin-Authentifizierung.

Kunden-Typen

Das System unterscheidet zwei Kunden-Typen:

  • Registrierte Kunden — haben ein Kundenkonto mit E-Mail und Passwort; erhalten positive IDs
  • Gastkunden — haben nur eine Bestellung ohne Konto; erhalten negative synthetische IDs (z.B. -1, -2, ...)

Schreibende Operationen (PUT, DELETE, Adressen) sind für Gastkunden nicht verfügbar und geben 400 zurück.

Endpunkte

Kunden auflisten

GET /api2/admin/customers

Gibt alle Kunden zurück — registrierte Kunden und Gastkäufer zusammengeführt, sortiert nach createdAt DESC.

Antwort:

{
  "customers": [
    {
      "id": 12,
      "email": "[email protected]",
      "firstName": "Max",
      "lastName": "Mustermann",
      "phone": "+49 7531 123456",
      "orderCount": 3,
      "totalSpent": 7470.00,
      "isGuest": false,
      "createdAt": "2024-06-01T12:00:00Z"
    },
    {
      "id": -1,
      "email": "[email protected]",
      "firstName": "Anna",
      "lastName": "Schmidt",
      "orderCount": 1,
      "totalSpent": 1250.00,
      "isGuest": true,
      "createdAt": "2025-01-10T09:30:00Z"
    }
  ]
}

Kunden suchen

GET /api2/admin/customers/search?q=mustermann

Durchsucht die Bestellungen nach Name, E-Mail oder Telefonnummer. Mindestens 2 Zeichen erforderlich. Gibt bis zu 20 Ergebnisse zurück.

Hinweis: Die Suche durchsucht die Bestellungstabelle. Registrierte Kunden ohne Bestellungen erscheinen nicht in den Suchergebnissen. Verwenden Sie die Auflisten-Route für vollständige Ergebnisse.

Antwort:

[
  {
    "id": 12,
    "email": "[email protected]",
    "firstName": "Max",
    "lastName": "Mustermann",
    "orderCount": 3,
    "totalSpent": 7470.00
  }
]

Kunden abrufen

GET /api2/admin/customers/{id}

Gibt das vollständige Kundenprofil mit Adressen und den letzten 5 Bestellungen zurück.

Antwort:

{
  "id": 12,
  "email": "[email protected]",
  "firstName": "Max",
  "lastName": "Mustermann",
  "phone": "+49 7531 123456",
  "isVerified": true,
  "addresses": [
    {
      "id": 55,
      "type": "shipping",
      "street": "Musterstraße 1",
      "city": "Konstanz",
      "postalCode": "78462",
      "country": "DE",
      "isDefault": true
    }
  ],
  "recentOrders": [
    {
      "id": 1001,
      "orderNumber": 10042,
      "status": "delivered",
      "totalAmount": 2490.00,
      "createdAt": "2025-01-15T10:30:00Z"
    }
  ],
  "createdAt": "2024-06-01T12:00:00Z"
}

Kunden aktualisieren

PUT /api2/admin/customers/{id}
X-CSRF-Token: <csrf-token>
Content-Type: application/json

{
  "email": "[email protected]",
  "firstName": "Max",
  "lastName": "Mustermann",
  "phone": "+49 7531 654321"
}

Nur email, firstName, lastName und phone können aktualisiert werden. Bei E-Mail-Änderungen wird auf Duplikate geprüft.

Antwort (200):

{
  "id": 12,
  "email": "[email protected]",
  "firstName": "Max",
  "lastName": "Mustermann",
  "updatedAt": "2025-01-20T14:00:00Z"
}

Kunden löschen

DELETE /api2/admin/customers/{id}
X-CSRF-Token: <csrf-token>

Löscht den Kunden und alle zugehörigen Adressen. Bestellungen bleiben erhalten.

Antwort (200):

{ "success": true }

Adressen verwalten

Adresse erstellen

POST /api2/admin/customers/{id}/addresses
X-CSRF-Token: <csrf-token>
Content-Type: application/json

{
  "type": "shipping",
  "firstName": "Max",
  "lastName": "Mustermann",
  "street": "Neue Straße 5",
  "city": "Konstanz",
  "postalCode": "78462",
  "country": "DE",
  "isDefault": true
}

type kann shipping oder billing sein. Wenn isDefault: true gesetzt wird, werden alle anderen Adressen desselben Typs automatisch als nicht-Standard markiert.

Antwort (201):

{
  "id": 56,
  "type": "shipping",
  "street": "Neue Straße 5",
  "city": "Konstanz",
  "postalCode": "78462",
  "country": "DE",
  "isDefault": true
}

Adresse aktualisieren

PUT /api2/admin/customers/addresses/{addressId}
X-CSRF-Token: <csrf-token>
Content-Type: application/json

{
  "customerId": 12,
  "street": "Geänderte Straße 10",
  "city": "Überlingen",
  "postalCode": "88662"
}

customerId ist im Request-Body erforderlich (IDOR-Schutz).


Adresse löschen

DELETE /api2/admin/customers/addresses/{addressId}?customerId=12
X-CSRF-Token: <csrf-token>

customerId als Query-Parameter ist erforderlich (IDOR-Schutz).

Antwort (200):

{ "success": true }