CREATE TYPE "public"."media_asset_status" AS ENUM('ready', 'missing', 'quarantined', 'unsupported');--> statement-breakpoint CREATE TABLE "media_assets" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "site_id" uuid NOT NULL, "source_connection_id" uuid NOT NULL, "source_id" text, "source_url" text NOT NULL, "source_path" text NOT NULL, "storage_path" text NOT NULL, "public_path" text NOT NULL, "sha256" text NOT NULL, "detected_mime" text NOT NULL, "declared_mime" text, "byte_size" bigint NOT NULL, "width" integer, "height" integer, "alt_text" text, "status" "media_asset_status" NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "media_usages" ( "site_id" uuid NOT NULL, "media_asset_id" uuid NOT NULL, "content_revision_id" uuid NOT NULL, "field_path" text NOT NULL, "source_url" text NOT NULL, CONSTRAINT "media_usages_media_asset_id_content_revision_id_field_path_pk" PRIMARY KEY("media_asset_id","content_revision_id","field_path") ); --> statement-breakpoint ALTER TABLE "media_assets" ADD CONSTRAINT "media_assets_site_id_sites_id_fk" FOREIGN KEY ("site_id") REFERENCES "public"."sites"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "media_assets" ADD CONSTRAINT "media_assets_source_connection_id_source_connections_id_fk" FOREIGN KEY ("source_connection_id") REFERENCES "public"."source_connections"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "media_usages" ADD CONSTRAINT "media_usages_site_id_sites_id_fk" FOREIGN KEY ("site_id") REFERENCES "public"."sites"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "media_usages" ADD CONSTRAINT "media_usages_media_asset_id_media_assets_id_fk" FOREIGN KEY ("media_asset_id") REFERENCES "public"."media_assets"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "media_usages" ADD CONSTRAINT "media_usages_content_revision_id_content_revisions_id_fk" FOREIGN KEY ("content_revision_id") REFERENCES "public"."content_revisions"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint CREATE UNIQUE INDEX "media_assets_source_url_uq" ON "media_assets" USING btree ("site_id","source_url");--> statement-breakpoint CREATE UNIQUE INDEX "media_assets_public_path_uq" ON "media_assets" USING btree ("site_id","public_path");