Bestandsabgleich mit ApiCore: Verkäufe zurückmelden, Entnahmen per Webhook übernehmen #18

Open
opened 2026-10-16 05:59:02 +00:00 by Nick.Rosenloecher · 0 comments
Owner

Ziel

Shop und ApiCore zeigen je Charge denselben Restbestand: bezahlte Verkäufe gehen an ApiCore, Entnahmen in ApiCore kommen sofort im Shop an.

Umgesetzt

  • Warteschlange apicore_stock_events in derselben Transaktion wie der Statuswechsel, feste Buchungs-ID, Chargen-Zuordnung je Position (93b589f, Migration 20261002120000_apicore_stock_sync)
  • Webhook POST /api/apicore/webhook (HMAC-signiert) für stock.changed
  • Nachhol-Skript pnpm stock:apicore-sync und CronJob wabenhain-apicore-stock alle 10 Minuten (k8s/07-backup-cronjob.yaml)
  • Dashboard zeigt hängende oder abgelehnte Buchungen und unverknüpfte Produkte
  • Code ist im produktiven Build sha-0d254db enthalten

Offen

  • APICORE_WEBHOOK_SECRET fehlt im Cluster-Secret wabenhain-secrets (Schlüsselnamen geprüft am 2026-10-16); ohne ihn antwortet der Webhook mit 503
  • In ApiCore: Webhook für stock.changed auf https://wabenhain.com/api/apicore/webhook anlegen und dem Shop-Schlüssel die Berechtigung shop-sync:write geben (Stand unbekannt)
  • CronJob wabenhain-apicore-stock ist im Cluster ausgesetzt (suspend: true), siehe CronJobs release-stale-orders und apicore-stock sind im Cluster ausgesetzt (#23)
  • Kerzen und Propolis in ApiCore als „Hergestellte Ware“ mit Herstellungscharge anlegen und im Shop verknüpfen
  • Danach einmal einen Testkauf mit Storno durchspielen und den Bestand in beiden Systemen vergleichen

Abhängigkeiten / Blocker

Secret, ApiCore-Einstellungen und das Fortsetzen des CronJobs kann nur der Inhaber freigeben bzw. anlegen.

Grundlage

README, Abschnitt „Bestandsabgleich“; Design im ApiCore-Repo docs/superpowers/specs/2026-10-02-bestandsabgleich-design.md. Verwandt: #14.

Status

Code: ja · Geprüft: ja (Unit-Tests stock-math, inventory, webhook-signature) · Gemergt: ja · Produktiv: teilweise (Code live, Webhook und CronJob nicht wirksam)
Stand: 2026-10-16 (Quelle: git origin/main 35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)

## Ziel Shop und ApiCore zeigen je Charge denselben Restbestand: bezahlte Verkäufe gehen an ApiCore, Entnahmen in ApiCore kommen sofort im Shop an. ## Umgesetzt - [x] Warteschlange `apicore_stock_events` in derselben Transaktion wie der Statuswechsel, feste Buchungs-ID, Chargen-Zuordnung je Position (`93b589f`, Migration `20261002120000_apicore_stock_sync`) - [x] Webhook `POST /api/apicore/webhook` (HMAC-signiert) für `stock.changed` - [x] Nachhol-Skript `pnpm stock:apicore-sync` und CronJob `wabenhain-apicore-stock` alle 10 Minuten (`k8s/07-backup-cronjob.yaml`) - [x] Dashboard zeigt hängende oder abgelehnte Buchungen und unverknüpfte Produkte - [x] Code ist im produktiven Build sha-0d254db enthalten ## Offen - [ ] `APICORE_WEBHOOK_SECRET` fehlt im Cluster-Secret `wabenhain-secrets` (Schlüsselnamen geprüft am 2026-10-16); ohne ihn antwortet der Webhook mit 503 - [ ] In ApiCore: Webhook für `stock.changed` auf `https://wabenhain.com/api/apicore/webhook` anlegen und dem Shop-Schlüssel die Berechtigung `shop-sync:write` geben (Stand unbekannt) - [ ] CronJob `wabenhain-apicore-stock` ist im Cluster ausgesetzt (`suspend: true`), siehe #23 - [ ] Kerzen und Propolis in ApiCore als „Hergestellte Ware“ mit Herstellungscharge anlegen und im Shop verknüpfen - [ ] Danach einmal einen Testkauf mit Storno durchspielen und den Bestand in beiden Systemen vergleichen ## Abhängigkeiten / Blocker Secret, ApiCore-Einstellungen und das Fortsetzen des CronJobs kann nur der Inhaber freigeben bzw. anlegen. ## Grundlage README, Abschnitt „Bestandsabgleich“; Design im ApiCore-Repo `docs/superpowers/specs/2026-10-02-bestandsabgleich-design.md`. Verwandt: #14. ## Status Code: ja · Geprüft: ja (Unit-Tests stock-math, inventory, webhook-signature) · Gemergt: ja · Produktiv: teilweise (Code live, Webhook und CronJob nicht wirksam) Stand: 2026-10-16 (Quelle: git origin/main 35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)
Nick.Rosenloecher added the prio/hochart/featureblockiertstatus/in-arbeit labels 2026-10-16 05:59:03 +00:00
Sign in to join this conversation.