-- CreateTable CREATE TABLE "outbox_events" ( "id" CHAR(26) NOT NULL, "aggregate_type" VARCHAR(64) NOT NULL, "aggregate_id" CHAR(26) NOT NULL, "event_type" VARCHAR(128) NOT NULL, "payload_json" JSONB NOT NULL, "trace_id" VARCHAR(64), "occurred_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "published_at" TIMESTAMPTZ(3), "attempts" INTEGER NOT NULL DEFAULT 0, "last_error" TEXT, CONSTRAINT "outbox_events_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "idempotency_keys" ( "id" CHAR(26) NOT NULL, "scope" VARCHAR(64) NOT NULL, "key" VARCHAR(128) NOT NULL, "request_hash" VARCHAR(64) NOT NULL, "response_status" INTEGER, "response_body" JSONB, "created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "expires_at" TIMESTAMPTZ(3) NOT NULL, CONSTRAINT "idempotency_keys_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "system_configs" ( "id" CHAR(26) NOT NULL, "config_key" VARCHAR(128) NOT NULL, "config_value" JSONB NOT NULL, "value_type" VARCHAR(16) NOT NULL, "description" VARCHAR(255) NOT NULL DEFAULT '', "version" INTEGER NOT NULL DEFAULT 1, "is_editable" BOOLEAN NOT NULL DEFAULT true, "created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMPTZ(3) NOT NULL, "updated_by" CHAR(26), CONSTRAINT "system_configs_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "outbox_events_published_at_occurred_at_idx" ON "outbox_events"("published_at", "occurred_at"); -- CreateIndex CREATE INDEX "outbox_events_aggregate_type_aggregate_id_idx" ON "outbox_events"("aggregate_type", "aggregate_id"); -- CreateIndex CREATE INDEX "idempotency_keys_expires_at_idx" ON "idempotency_keys"("expires_at"); -- CreateIndex CREATE UNIQUE INDEX "idempotency_keys_scope_key_key" ON "idempotency_keys"("scope", "key"); -- CreateIndex CREATE UNIQUE INDEX "system_configs_config_key_key" ON "system_configs"("config_key");