Add Paddle webhook ingestion foundation

This commit is contained in:
diyaa
2026-07-11 08:40:31 +02:00
parent db83d3612d
commit 6498b3b38b
8 changed files with 477 additions and 2 deletions
@@ -0,0 +1,23 @@
-- CreateEnum
CREATE TYPE "BillingWebhookStatus" AS ENUM ('RECEIVED', 'DUPLICATE', 'FAILED');
-- CreateTable
CREATE TABLE "billing_webhook_events" (
"id" UUID NOT NULL,
"provider" "BillingProvider" NOT NULL,
"provider_event_id" TEXT NOT NULL,
"event_type" TEXT NOT NULL,
"payload" JSONB NOT NULL,
"received_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"processed_at" TIMESTAMP(3),
"status" "BillingWebhookStatus" NOT NULL,
"error_message" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "billing_webhook_events_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "billing_webhook_events_provider_provider_event_id_key"
ON "billing_webhook_events"("provider", "provider_event_id");
+23
View File
@@ -349,6 +349,23 @@ model UserEntitlement {
@@map("user_entitlements")
}
model BillingWebhookEvent {
id String @id @default(uuid()) @db.Uuid
provider BillingProvider
providerEventId String @map("provider_event_id")
eventType String @map("event_type")
payload Json
receivedAt DateTime @default(now()) @map("received_at")
processedAt DateTime? @map("processed_at")
status BillingWebhookStatus
errorMessage String? @map("error_message")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@unique([provider, providerEventId])
@@map("billing_webhook_events")
}
enum SubscriptionStatus {
TRIAL
ACTIVE
@@ -366,6 +383,12 @@ enum BillingProvider {
PADDLE
}
enum BillingWebhookStatus {
RECEIVED
DUPLICATE
FAILED
}
enum UserAccountKind {
LEGACY_DEFAULT
GUEST