CREATE TYPE "public"."central_service" AS ENUM('ai', 'banking');--> statement-breakpoint CREATE TYPE "public"."usage_status" AS ENUM('succeeded', 'failed');--> statement-breakpoint CREATE TABLE "service_entitlements" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "instance_id" uuid NOT NULL, "service" "central_service" NOT NULL, "enabled" boolean DEFAULT false NOT NULL, "monthly_limit" bigint, "unit_price_micros" bigint DEFAULT 0 NOT NULL, "metadata" jsonb DEFAULT '{}'::jsonb 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 "service_usage_events" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "request_id" text NOT NULL, "instance_id" uuid NOT NULL, "service" "central_service" NOT NULL, "operation" text NOT NULL, "units" bigint DEFAULT 1 NOT NULL, "cost_micros" bigint DEFAULT 0 NOT NULL, "status" "usage_status" NOT NULL, "provider" text, "provider_request_id" text, "error_code" text, "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT "service_usage_events_request_id_unique" UNIQUE("request_id") ); --> statement-breakpoint ALTER TABLE "service_entitlements" ADD CONSTRAINT "service_entitlements_instance_id_push_instances_id_fk" FOREIGN KEY ("instance_id") REFERENCES "public"."push_instances"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "service_usage_events" ADD CONSTRAINT "service_usage_events_instance_id_push_instances_id_fk" FOREIGN KEY ("instance_id") REFERENCES "public"."push_instances"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint CREATE UNIQUE INDEX "service_entitlements_instance_service_idx" ON "service_entitlements" USING btree ("instance_id","service");--> statement-breakpoint CREATE UNIQUE INDEX "service_usage_events_request_id_idx" ON "service_usage_events" USING btree ("request_id");--> statement-breakpoint CREATE INDEX "service_usage_events_instance_service_created_idx" ON "service_usage_events" USING btree ("instance_id","service","created_at");