Zum Hauptinhalt springen

Cron Jobs

Hintergrund-Jobs werden via Sevalla Cron ausgeführt. Authentifizierung: Authorization: Bearer {CRON_SECRET}.

Übersicht

JobPfadIntervall
Shopify Incremental Sync/api/v1/cron/shopify-incrementalAlle 15 Min
Shopify Queue Processor/api/v1/cron/shopify-queueJede Minute
DHL Tracking Update/api/v1/cron/dhl-trackingAlle 2 Stunden
Daily Notifications/api/v1/cron/daily-notificationsTäglich
Notification Cleanup/api/v1/cron/notification-cleanupTäglich

GET /api/v1/cron/shopify-incremental

Inkrementeller Sync für alle verbundenen Tenants.

Logik:

  1. Findet alle Tenants mit aktiver Shopify-Verbindung
  2. Prüft Usage-Limits pro Plan
  3. Synchronisiert parallel pro Tenant
  4. 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:

  1. Atomares Claiming via UPDATE WHERE status = 'pending'
  2. Unterstützt: full_sync, incremental_sync, inventory_push
  3. Exponential Backoff bei Fehlern (5 Versuche: 1min, 5min, 15min, 1h, 4h)
  4. Loggt Ergebnisse in shopify_sync_log

GET /api/v1/cron/dhl-tracking

Tracking-Status für aktive Sendungen aktualisieren.

Logik:

  1. Findet Sendungen mit Status LabelCreated oder InTransit
  2. Entschlüsselt DHL-Credentials pro Tenant (pgcrypto)
  3. Fragt DHL Tracking API ab
  4. Aktualisiert Status (ggf. auf Delivered)
  5. Markiert Bestellung als geliefert wenn alle Sendungen zugestellt

POST /api/v1/cron/daily-notifications

Erstellt Benachrichtigungen für berechnete Events.

Notification-Typen:

TypEmpfängerBedingung
Trial ablaufendAdmin≤ 3 Tage verbleibend
Trial abgelaufenAdminAbgelaufen
Wartung fällig/überfälligRösterIntervall erreicht
Tonne bereitPackerStatus = Ready
Niedriger BestandAdmin + RösterUnter Warnschwelle
Zahlung überfälligAdmin + BüroZahlungsziel überschritten

Deduplication: 1-Stunden-Fenster (verhindert Dopplungen).

Stripe Webhook

POST /api/v1/billing/webhooks

Stripe Webhook-Handler (Signatur-verifiziert, keine Auth).

Handled Events:

EventAktion
checkout.session.completedSubscription aktivieren
customer.subscription.updatedPlan-Wechsel/Renewal
customer.subscription.deletedKündigung
invoice.payment_failedpast_due markieren, Admin benachrichtigen
invoice.paidZahlung bestätigen

Idempotenz: Duplicate Events werden erkannt und ignoriert.