CREATE TABLE "api_keys" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "key_hash" text NOT NULL, "label" text, "rate_limit" integer, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "revoked_at" timestamp with time zone, CONSTRAINT "api_keys_key_hash_unique" UNIQUE("key_hash") ); --> statement-breakpoint CREATE TABLE "cache" ( "cache_key" text PRIMARY KEY NOT NULL, "job_id" uuid, "url" text NOT NULL, "options_hash" text NOT NULL, "compiler_version" text NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "expires_at" timestamp with time zone NOT NULL ); --> statement-breakpoint CREATE TABLE "clones" ( "job_id" uuid PRIMARY KEY NOT NULL, "url" text NOT NULL, "route_count" integer DEFAULT 1 NOT NULL, "file_manifest" jsonb NOT NULL, "bundle_s3_key" text, "verify" jsonb, "capture_meta" jsonb NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "jobs" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "kind" text NOT NULL, "url" text NOT NULL, "options" jsonb DEFAULT '{}'::jsonb NOT NULL, "status" text DEFAULT 'queued' NOT NULL, "cache_key" text NOT NULL, "attempts" integer DEFAULT 0 NOT NULL, "error" text, "compiler_version" text, "timings" jsonb, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "started_at" timestamp with time zone, "finished_at" timestamp with time zone ); --> statement-breakpoint ALTER TABLE "cache" ADD CONSTRAINT "cache_job_id_jobs_id_fk" FOREIGN KEY ("job_id") REFERENCES "public"."jobs"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "clones" ADD CONSTRAINT "clones_job_id_jobs_id_fk" FOREIGN KEY ("job_id") REFERENCES "public"."jobs"("id") ON DELETE cascade ON UPDATE no action;