# Advoware API Proxy Steps

Dieser Ordner enthält die API-Proxy-Steps für die Advoware-Integration. Jeder Step implementiert eine HTTP-Methode als universellen Proxy zur Advoware-API.

## Übersicht

Die Proxy-Steps fungieren als transparente Schnittstelle zwischen Clients und der Advoware-API. Sie handhaben Authentifizierung, Fehlerbehandlung und Logging automatisch.

## Steps

### 1. GET Proxy (`advoware_api_proxy_get_step.py`)

**Zweck:** Universeller Proxy für GET-Requests an die Advoware-API.

**Konfiguration:**
- **Type:** api
- **Name:** Advoware Proxy GET
- **Path:** `/advoware/proxy`
- **Method:** GET
- **Flows:** advoware

**Funktionalität:**
- Extrahiert den Ziel-Endpoint aus Query-Parametern (`endpoint`)
- Übergibt alle anderen Query-Parameter als API-Parameter
- Gibt das Ergebnis als JSON zurück

**Beispiel Request:**
```
GET /advoware/proxy?endpoint=employees&limit=10&offset=0
```

**Response:**
```json
{
  "result": {
    "data": [...],
    "total": 100
  }
}
```

### 2. POST Proxy (`advoware_api_proxy_post_step.py`)

**Zweck:** Universeller Proxy für POST-Requests an die Advoware-API.

**Konfiguration:**
- **Type:** api
- **Name:** Advoware Proxy POST
- **Path:** `/advoware/proxy`
- **Method:** POST
- **Flows:** advoware

**Funktionalität:**
- Extrahiert den Ziel-Endpoint aus Query-Parametern (`endpoint`)
- Verwendet den Request-Body als JSON-Daten für die API
- Erstellt neue Ressourcen in Advoware

**Beispiel Request:**
```
POST /advoware/proxy?endpoint=employees
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john@example.com"
}
```

### 3. PUT Proxy (`advoware_api_proxy_put_step.py`)

**Zweck:** Universeller Proxy für PUT-Requests an die Advoware-API.

**Konfiguration:**
- **Type:** api
- **Name:** Advoware Proxy PUT
- **Path:** `/advoware/proxy`
- **Method:** PUT
- **Flows:** advoware

**Funktionalität:**
- Extrahiert den Ziel-Endpoint aus Query-Parametern (`endpoint`)
- Verwendet den Request-Body als JSON-Daten für Updates
- Aktualisiert bestehende Ressourcen in Advoware

**Beispiel Request:**
```
PUT /advoware/proxy?endpoint=employees/123
Content-Type: application/json

{
  "name": "John Smith",
  "email": "johnsmith@example.com"
}
```

### 4. DELETE Proxy (`advoware_api_proxy_delete_step.py`)

**Zweck:** Universeller Proxy für DELETE-Requests an die Advoware-API.

**Konfiguration:**
- **Type:** api
- **Name:** Advoware Proxy DELETE
- **Path:** `/advoware/proxy`
- **Method:** DELETE
- **Flows:** advoware

**Funktionalität:**
- Extrahiert den Ziel-Endpoint aus Query-Parametern (`endpoint`)
- Löscht Ressourcen in Advoware

**Beispiel Request:**
```
DELETE /advoware/proxy?endpoint=employees/123
```

## Gemeinsame Features

### Authentifizierung
Alle Steps verwenden den `AdvowareAPI` Service für automatische Token-Verwaltung und Authentifizierung.

### Fehlerbehandlung
- **400 Bad Request:** Fehlender `endpoint` Parameter
- **500 Internal Server Error:** API-Fehler oder Exceptions

### Logging
Detaillierte Logs für:
- Eingehende Requests
- API-Calls an Advoware
- Fehler und Exceptions

### Sicherheit
- Keine direkte Weitergabe sensibler Daten
- Authentifizierung über Service-Layer
- Input-Validation für erforderliche Parameter

## Testing

### Unit Tests
```bash
# Test GET Proxy
curl -X GET "http://localhost:3000/advoware/proxy?endpoint=employees"

# Test POST Proxy
curl -X POST "http://localhost:3000/advoware/proxy?endpoint=employees" \
  -H "Content-Type: application/json" \
  -d '{"name": "Test Employee"}'

# Test PUT Proxy
curl -X PUT "http://localhost:3000/advoware/proxy?endpoint=employees/1" \
  -H "Content-Type: application/json" \
  -d '{"name": "Updated Employee"}'

# Test DELETE Proxy
curl -X DELETE "http://localhost:3000/advoware/proxy?endpoint=employees/1"
```

### Integration Tests
Überprüfen Sie die Logs für korrekte API-Calls:
```bash
motia logs | grep "Proxying request to Advoware"
```

## Konfiguration

### Umgebungsvariablen
Stellen Sie sicher, dass folgende Variablen gesetzt sind:
- `ADVOWARE_BASE_URL`
- `ADVOWARE_USERNAME`
- `ADVOWARE_PASSWORD`

### Dependencies
- `services/advoware.py` - Advoware API Client
- `config.py` - Konfigurationsmanagement

## Erweiterungen

### Geplante Features
- Request/Response Caching
- Rate Limiting
- Request Validation Schemas
- Batch-Operations Support

### Custom Endpoints
Für spezifische Endpoints können zusätzliche Steps erstellt werden, die direkt auf bestimmte Ressourcen zugreifen.