-- Idempotency table for inbound Shopify webhooks. We insert a row keyed on
-- the X-Shopify-Webhook-Id header at the start of webhook processing; a
-- duplicate insert (P2002) means Shopify retried a delivery we've already
-- seen, so we short-circuit and return 200 without doing the work twice.
CREATE TABLE "ProcessedWebhook" (
    "webhookId"  TEXT NOT NULL PRIMARY KEY,
    "topic"      TEXT NOT NULL,
    "shopDomain" TEXT NOT NULL,
    "receivedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX "ProcessedWebhook_shopDomain_topic_idx"
    ON "ProcessedWebhook"("shopDomain", "topic");
