-- CreateTable: outbox_events (Outbox Pattern) CREATE TABLE "outbox_events" ( "outbox_id" BIGSERIAL NOT NULL, "event_type" VARCHAR(100) NOT NULL, "topic" VARCHAR(100) NOT NULL, "key" VARCHAR(200) NOT NULL, "payload" JSONB NOT NULL, "aggregate_id" VARCHAR(100) NOT NULL, "aggregate_type" VARCHAR(50) NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'PENDING', "retry_count" INTEGER NOT NULL DEFAULT 0, "max_retries" INTEGER NOT NULL DEFAULT 5, "last_error" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "published_at" TIMESTAMP(3), "next_retry_at" TIMESTAMP(3), CONSTRAINT "outbox_events_pkey" PRIMARY KEY ("outbox_id") ); -- CreateIndex CREATE INDEX "outbox_events_status_created_at_idx" ON "outbox_events"("status", "created_at"); -- CreateIndex CREATE INDEX "outbox_events_status_next_retry_at_idx" ON "outbox_events"("status", "next_retry_at"); -- CreateIndex CREATE INDEX "outbox_events_aggregate_type_aggregate_id_idx" ON "outbox_events"("aggregate_type", "aggregate_id"); -- CreateIndex CREATE INDEX "outbox_events_topic_idx" ON "outbox_events"("topic");