Cron Jobs
Hintergrund-Jobs werden via Sevalla Cron ausgeführt. Authentifizierung: Authorization: Bearer {CRON_SECRET}.
Übersicht
| Job | Pfad | Intervall |
|---|---|---|
| Shopify Incremental Sync | /api/v1/cron/shopify-incremental | Alle 15 Min |
| Shopify Queue Processor | /api/v1/cron/shopify-queue | Jede Minute |
| DHL Tracking Update | /api/v1/cron/dhl-tracking | Alle 2 Stunden |
| Daily Notifications | /api/v1/cron/daily-notifications | Täglich |
| Notification Cleanup | /api/v1/cron/notification-cleanup | Täglich |
GET /api/v1/cron/shopify-incremental
Inkrementeller Sync für alle verbundenen Tenants.
Logik:
- Findet alle Tenants mit aktiver Shopify-Verbindung
- Prüft Usage-Limits pro Plan
- Synchronisiert parallel pro Tenant
- Benachrichtigt bei Fehlern
Response:
{
"tenants_synced": 12,
"results": [
{ "tenant_id": "...", "synced": 45, "errors": 0 }
]
}
GET /api/v1/cron/shopify-queue
Verarbeitet wartende Sync-Jobs aus der Queue.
Logik:
- Atomares Claiming via
UPDATE WHERE status = 'pending' - Unterstützt:
full_sync,incremental_sync,inventory_push - Exponential Backoff bei Fehlern (5 Versuche: 1min, 5min, 15min, 1h, 4h)
- Loggt Ergebnisse in
shopify_sync_log
GET /api/v1/cron/dhl-tracking
Tracking-Status für aktive Sendungen aktualisieren.
Logik:
- Findet Sendungen mit Status
LabelCreatedoderInTransit - Entschlüsselt DHL-Credentials pro Tenant (pgcrypto)
- Fragt DHL Tracking API ab
- Aktualisiert Status (ggf. auf
Delivered) - Markiert Bestellung als geliefert wenn alle Sendungen zugestellt
POST /api/v1/cron/daily-notifications
Erstellt Benachrichtigungen für berechnete Events.
Notification-Typen:
| Typ | Empfänger | Bedingung |
|---|---|---|
| Trial ablaufend | Admin | ≤ 3 Tage verbleibend |
| Trial abgelaufen | Admin | Abgelaufen |
| Wartung fällig/überfällig | Röster | Intervall erreicht |
| Tonne bereit | Packer | Status = Ready |
| Niedriger Bestand | Admin + Röster | Unter Warnschwelle |
| Zahlung überfällig | Admin + Büro | Zahlungsziel überschritten |
Deduplication: 1-Stunden-Fenster (verhindert Dopplungen).
Stripe Webhook
POST /api/v1/billing/webhooks
Stripe Webhook-Handler (Signatur-verifiziert, keine Auth).
Handled Events:
| Event | Aktion |
|---|---|
checkout.session.completed | Subscription aktivieren |
customer.subscription.updated | Plan-Wechsel/Renewal |
customer.subscription.deleted | Kündigung |
invoice.payment_failed | past_due markieren, Admin benachrichtigen |
invoice.paid | Zahlung bestätigen |
Idempotenz: Duplicate Events werden erkannt und ignoriert.