Kategori Event'leri — category.created · updated · deleted ✓ Canlı

Ürün kategorileri değiştiğinde eklentinin webhookUrl'ine async imzalı POST edilir. Menü ağacı senkronu için product.* event'leriyle birlikte kullanılır.

← Event Kataloğu

Ne zaman tetiklenir?

EventTetikdata
category.createdYeni kategori eklendiğindeYeni kategori
category.updatedKategori düzenlendiğindeGüncel hâli
category.deletedKategori silindiğindeSilinen kategorinin son hâli

Üçü de async webhook (fire-and-forget). Şekil aynı, yalnız type farklı.

Abonelik

  • Manifest: events: ["category.created", "category.updated", "category.deleted"] + events:subscribe.
  • products:read — kategori menü/ürün domain'idir (ürün event'leriyle aynı scope); yoksa data boş gelir.

HTTP, imza & teslimat

POST {webhookUrl}
Content-Type: application/json
X-Restomenum-Signature: t=<unixSec>,v1=<HMAC_SHA256(webhookSecret, "<t>.<rawBody>")>
X-Restomenum-Event: category.created | category.updated | category.deleted
X-Restomenum-Delivery: <deliveryId>
  • İmzayı ham gövde üzerinden doğrula ("<t>.<rawBody>"), ±5 dk replay — bkz. imza şeması.
  • Header'lar: X-Restomenum-Event: <type>, X-Restomenum-Delivery: <id>.
  • Idempotency: envelope id tekildir (at-least-once → dedup, 200 dön).
  • Ack: 2xx → işlendi. 5xx/timeout → retry → dead-letter.

Tam örnek payload

category.created (canlı)
{
  "id": "evt_<uuid>",
  "type": "category.created",
  "version": "1",
  "tenantId": "<tenantId>",
  "occurredAt": 1780954278355,
  "data": {
    "id": "a0-0c",
    "title": "SOĞUK İÇECEKLER",
    "image": "https://d37x2wx7jj7xm7.cloudfront.net/server/SM9M.../category/.../original.jpeg",
    "rank": 2,
    "active": true,
    "languages": {}
  }
}

category.updated güncel kategoriyi; category.deleted silinen kategorinin son hâlini taşır — yalnız type farklı.

data alanları

AlanTipZorunluAçıklama
idstringKategori id'si — ürünün category alanı bu id'dir (categories/list ile aynı).
titlestringKategori adı.
imagestring | nullGörsel CDN URL'i; yoksa null.
ranknumberSıralama (yeni kategoride oluşturma zaman damgası; yeniden sıralanınca küçülür).
activebooleanAktif mi.
languagesobjectDil çevirileri (varsa, çoğunlukla boş {}).

Sızıntı önlemi

  • İç alanlar (qrHide, webstoreHide, c) dönmez.
  • Görsel: Restomenum S3 → CloudFront CDN.
  • data yalnız products:read onaylıysa dolu; yoksa {}.
Menü ağacı senkronu: ilk yüklemede categories/list + products/list; sonrasında delta için category.* ve product.* event'leri. Ürünün category alanı buradaki id ile eşleşir.