117 lines
5.2 KiB
SQL
117 lines
5.2 KiB
SQL
CREATE TABLE "business_event_outbox" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"event_type" text NOT NULL,
|
|
"schema_version" integer NOT NULL,
|
|
"entity_type" text NOT NULL,
|
|
"entity_id" text NOT NULL,
|
|
"correlation_id" text NOT NULL,
|
|
"causation_id" text,
|
|
"event_envelope" jsonb NOT NULL,
|
|
"delivery_status" text DEFAULT 'pending' NOT NULL,
|
|
"attempt_count" integer DEFAULT 0 NOT NULL,
|
|
"available_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"processing_started_at" timestamp with time zone,
|
|
"dispatched_at" timestamp with time zone,
|
|
"failed_at" timestamp with time zone,
|
|
"dead_lettered_at" timestamp with time zone,
|
|
"last_error_code" text,
|
|
"last_error_message" text,
|
|
"occurred_at" timestamp with time zone NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "projection_consumer_checkpoints" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"consumer_name" text NOT NULL,
|
|
"projection_name" text NOT NULL,
|
|
"event_id" text NOT NULL,
|
|
"event_type" text NOT NULL,
|
|
"schema_version" integer NOT NULL,
|
|
"processing_status" text DEFAULT 'pending' NOT NULL,
|
|
"attempt_count" integer DEFAULT 0 NOT NULL,
|
|
"first_attempted_at" timestamp with time zone,
|
|
"last_attempted_at" timestamp with time zone,
|
|
"completed_at" timestamp with time zone,
|
|
"next_retry_at" timestamp with time zone,
|
|
"error_code" text,
|
|
"error_message" text,
|
|
"processing_duration_ms" integer,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "projection_dead_letters" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"consumer_name" text NOT NULL,
|
|
"projection_name" text NOT NULL,
|
|
"event_id" text NOT NULL,
|
|
"event_type" text NOT NULL,
|
|
"schema_version" integer NOT NULL,
|
|
"attempt_count" integer NOT NULL,
|
|
"error_code" text NOT NULL,
|
|
"error_message" text NOT NULL,
|
|
"failure_metadata" jsonb,
|
|
"status" text DEFAULT 'open' NOT NULL,
|
|
"resolved_at" timestamp with time zone,
|
|
"resolved_by" text,
|
|
"resolution_reason" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "projection_health_snapshots" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"projection_name" text NOT NULL,
|
|
"consumer_name" text NOT NULL,
|
|
"status" text DEFAULT 'healthy' NOT NULL,
|
|
"last_processed_event_id" text,
|
|
"last_successful_processing_at" timestamp with time zone,
|
|
"pending_count" integer DEFAULT 0 NOT NULL,
|
|
"retry_count" integer DEFAULT 0 NOT NULL,
|
|
"dead_letter_count" integer DEFAULT 0 NOT NULL,
|
|
"unsupported_version_count" integer DEFAULT 0 NOT NULL,
|
|
"processing_lag_ms" integer DEFAULT 0 NOT NULL,
|
|
"average_processing_duration_ms" integer DEFAULT 0 NOT NULL,
|
|
"last_rebuild_at" timestamp with time zone,
|
|
"rebuild_source" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "projection_rebuild_runs" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"projection_name" text NOT NULL,
|
|
"entity_type" text,
|
|
"entity_id" text,
|
|
"occurred_from" timestamp with time zone,
|
|
"occurred_to" timestamp with time zone,
|
|
"dry_run" boolean DEFAULT true NOT NULL,
|
|
"reset_existing" boolean DEFAULT false NOT NULL,
|
|
"source_strategy" text NOT NULL,
|
|
"status" text DEFAULT 'pending' NOT NULL,
|
|
"processed_count" integer DEFAULT 0 NOT NULL,
|
|
"skipped_count" integer DEFAULT 0 NOT NULL,
|
|
"failed_count" integer DEFAULT 0 NOT NULL,
|
|
"error_code" text,
|
|
"error_message" text,
|
|
"requested_by" text NOT NULL,
|
|
"started_at" timestamp with time zone,
|
|
"completed_at" timestamp with time zone,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE INDEX "business_event_outbox_status_available_idx" ON "business_event_outbox" USING btree ("delivery_status","available_at");--> statement-breakpoint
|
|
CREATE INDEX "business_event_outbox_org_event_idx" ON "business_event_outbox" USING btree ("organization_id","event_type");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "projection_checkpoints_consumer_event_idx" ON "projection_consumer_checkpoints" USING btree ("consumer_name","event_id");--> statement-breakpoint
|
|
CREATE INDEX "projection_checkpoints_status_retry_idx" ON "projection_consumer_checkpoints" USING btree ("processing_status","next_retry_at");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "projection_dead_letters_consumer_event_idx" ON "projection_dead_letters" USING btree ("consumer_name","event_id");--> statement-breakpoint
|
|
CREATE INDEX "projection_dead_letters_org_status_idx" ON "projection_dead_letters" USING btree ("organization_id","status");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "projection_health_org_consumer_idx" ON "projection_health_snapshots" USING btree ("organization_id","consumer_name");--> statement-breakpoint
|
|
CREATE INDEX "projection_rebuild_runs_org_projection_idx" ON "projection_rebuild_runs" USING btree ("organization_id","projection_name"); |