72 lines
4.0 KiB
MySQL
72 lines
4.0 KiB
MySQL
|
|
CREATE TYPE "public"."asset_status" AS ENUM('active', 'disabled', 'deleted');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."requested_format" AS ENUM('auto', 'avif', 'webp', 'jpg', 'png');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."variant_format" AS ENUM('avif', 'webp', 'jpg', 'png');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."variant_status" AS ENUM('pending', 'processing', 'ready', 'failed');--> statement-breakpoint
|
||
|
|
CREATE TABLE "allowed_image_hosts" (
|
||
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
||
|
|
"hostname" text NOT NULL,
|
||
|
|
"enabled" boolean DEFAULT true NOT NULL,
|
||
|
|
"description" 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 "image_asset_versions" (
|
||
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
||
|
|
"asset_id" uuid NOT NULL,
|
||
|
|
"version" integer NOT NULL,
|
||
|
|
"source_url" text NOT NULL,
|
||
|
|
"source_host" text NOT NULL,
|
||
|
|
"source_hash" text NOT NULL,
|
||
|
|
"original_s3_key" text,
|
||
|
|
"width" integer,
|
||
|
|
"height" integer,
|
||
|
|
"content_type" text,
|
||
|
|
"size_bytes" bigint,
|
||
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "image_assets" (
|
||
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
||
|
|
"public_id" text NOT NULL,
|
||
|
|
"current_version" integer DEFAULT 1 NOT NULL,
|
||
|
|
"status" "asset_status" DEFAULT 'active' 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 "image_variants" (
|
||
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
||
|
|
"asset_id" uuid NOT NULL,
|
||
|
|
"asset_version_id" uuid NOT NULL,
|
||
|
|
"asset_version" integer NOT NULL,
|
||
|
|
"preset" text NOT NULL,
|
||
|
|
"variant_hash" text NOT NULL,
|
||
|
|
"requested_format" "requested_format" DEFAULT 'auto' NOT NULL,
|
||
|
|
"format" "variant_format" NOT NULL,
|
||
|
|
"width" integer NOT NULL,
|
||
|
|
"height" integer,
|
||
|
|
"quality" integer NOT NULL,
|
||
|
|
"s3_key" text NOT NULL,
|
||
|
|
"content_type" text,
|
||
|
|
"etag" text,
|
||
|
|
"status" "variant_status" DEFAULT 'pending' NOT NULL,
|
||
|
|
"size_bytes" bigint,
|
||
|
|
"error" text,
|
||
|
|
"attempt_count" integer DEFAULT 0 NOT NULL,
|
||
|
|
"last_accessed_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
|
||
|
|
ALTER TABLE "image_asset_versions" ADD CONSTRAINT "image_asset_versions_asset_id_image_assets_id_fk" FOREIGN KEY ("asset_id") REFERENCES "public"."image_assets"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "image_variants" ADD CONSTRAINT "image_variants_asset_id_image_assets_id_fk" FOREIGN KEY ("asset_id") REFERENCES "public"."image_assets"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "image_variants" ADD CONSTRAINT "image_variants_asset_version_id_image_asset_versions_id_fk" FOREIGN KEY ("asset_version_id") REFERENCES "public"."image_asset_versions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "allowed_image_hosts_hostname_idx" ON "allowed_image_hosts" USING btree ("hostname");--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "image_asset_versions_asset_version_idx" ON "image_asset_versions" USING btree ("asset_id","version");--> statement-breakpoint
|
||
|
|
CREATE INDEX "image_asset_versions_source_hash_idx" ON "image_asset_versions" USING btree ("source_hash");--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "image_assets_public_id_idx" ON "image_assets" USING btree ("public_id");--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "image_variants_lookup_idx" ON "image_variants" USING btree ("asset_id","asset_version","preset","width","quality","format");--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "image_variants_s3_key_idx" ON "image_variants" USING btree ("s3_key");--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "image_variants_variant_hash_idx" ON "image_variants" USING btree ("variant_hash");--> statement-breakpoint
|
||
|
|
CREATE INDEX "image_variants_status_idx" ON "image_variants" USING btree ("status");
|