cleanup
This commit is contained in:
96
bitbylaw/steps/advoware_cal_sync/calendar_sync_api_step.md
Normal file
96
bitbylaw/steps/advoware_cal_sync/calendar_sync_api_step.md
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
type: step
|
||||
category: api
|
||||
name: Calendar Sync API
|
||||
version: 1.0.0
|
||||
status: active
|
||||
tags: [calendar, sync, api, manual-trigger]
|
||||
dependencies:
|
||||
- redis
|
||||
emits: [calendar_sync_all, calendar_sync_employee]
|
||||
---
|
||||
|
||||
# Calendar Sync API Step
|
||||
|
||||
## Zweck
|
||||
Manueller Trigger für Calendar-Synchronisation via HTTP-Endpoint. Ermöglicht Sync für alle oder einzelne Mitarbeiter.
|
||||
|
||||
## Config
|
||||
```python
|
||||
{
|
||||
'type': 'api',
|
||||
'name': 'Calendar Sync API',
|
||||
'path': '/advoware/calendar/sync',
|
||||
'method': 'POST',
|
||||
'emits': ['calendar_sync_all', 'calendar_sync_employee'],
|
||||
'flows': ['advoware_cal_sync']
|
||||
}
|
||||
```
|
||||
|
||||
## Input
|
||||
```bash
|
||||
POST /advoware/calendar/sync
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"kuerzel": "ALL", # or specific: "SB"
|
||||
"full_content": true
|
||||
}
|
||||
```
|
||||
|
||||
**Parameters**:
|
||||
- `kuerzel` (optional): "ALL" oder Mitarbeiter-Kürzel (default: "ALL")
|
||||
- `full_content` (optional): true = volle Details, false = anonymisiert (default: true)
|
||||
|
||||
## Output
|
||||
```json
|
||||
{
|
||||
"status": "triggered",
|
||||
"kuerzel": "ALL",
|
||||
"message": "Calendar sync triggered for ALL"
|
||||
}
|
||||
```
|
||||
|
||||
## Verhalten
|
||||
|
||||
**Case 1: ALL (oder kein kuerzel)**:
|
||||
1. Emit `calendar_sync_all` event
|
||||
2. `calendar_sync_all_step` fetcht alle Employees
|
||||
3. Pro Employee: Emit `calendar_sync_employee`
|
||||
|
||||
**Case 2: Specific Employee (z.B. "SB")**:
|
||||
1. Set Redis Lock: `calendar_sync:lock:SB`
|
||||
2. Emit `calendar_sync_employee` event direkt
|
||||
3. Lock verhindert parallele Syncs für denselben Employee
|
||||
|
||||
## Redis Locking
|
||||
```python
|
||||
lock_key = f'calendar_sync:lock:{kuerzel}'
|
||||
redis_client.set(lock_key, '1', nx=True, ex=300) # 5min TTL
|
||||
```
|
||||
|
||||
## Testing
|
||||
```bash
|
||||
# Sync all employees
|
||||
curl -X POST "http://localhost:3000/advoware/calendar/sync" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"full_content": true}'
|
||||
|
||||
# Sync single employee
|
||||
curl -X POST "http://localhost:3000/advoware/calendar/sync" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"kuerzel": "SB", "full_content": true}'
|
||||
|
||||
# Sync with anonymization
|
||||
curl -X POST "http://localhost:3000/advoware/calendar/sync" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"kuerzel": "SB", "full_content": false}'
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
- Lock active: Wartet oder gibt Fehler zurück
|
||||
- Invalid kuerzel: Wird an all_step oder event_step weitergegeben
|
||||
|
||||
## Related
|
||||
- [calendar_sync_all_step.md](calendar_sync_all_step.md) - Handles "ALL"
|
||||
- [calendar_sync_event_step.md](calendar_sync_event_step.md) - Per-employee sync
|
||||
Reference in New Issue
Block a user