feat: drizzle schema + migrations for products/snapshots/alerts

This commit is contained in:
2026-05-25 13:49:18 +00:00
parent a96a2e60d8
commit fb308da5c5
8 changed files with 393 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
CREATE TABLE "alerts" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"product_id" uuid NOT NULL,
"type" text NOT NULL,
"config" jsonb NOT NULL,
"enabled" boolean DEFAULT true NOT NULL,
"last_triggered_at" timestamp with time zone,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT "alert_type_check" CHECK ("alerts"."type" in ('target_price','all_time_low','percent_drop'))
);
--> statement-breakpoint
CREATE TABLE "price_snapshots" (
"id" bigserial PRIMARY KEY NOT NULL,
"product_id" uuid NOT NULL,
"price" numeric(10, 2),
"currency" text DEFAULT 'EUR' NOT NULL,
"availability" text,
"error" text,
"scraped_at" timestamp with time zone DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE "products" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"url" text NOT NULL,
"shop" text NOT NULL,
"name" text NOT NULL,
"image_url" text,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"enabled" boolean DEFAULT true NOT NULL,
"last_scraped_at" timestamp with time zone,
"consecutive_failures" integer DEFAULT 0 NOT NULL,
CONSTRAINT "products_url_unique" UNIQUE("url"),
CONSTRAINT "shop_check" CHECK ("products"."shop" in ('amazon','idealo','geizhals'))
);
--> statement-breakpoint
ALTER TABLE "alerts" ADD CONSTRAINT "alerts_product_id_products_id_fk" FOREIGN KEY ("product_id") REFERENCES "public"."products"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "price_snapshots" ADD CONSTRAINT "price_snapshots_product_id_products_id_fk" FOREIGN KEY ("product_id") REFERENCES "public"."products"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "snapshots_product_scraped_idx" ON "price_snapshots" USING btree ("product_id","scraped_at" DESC NULLS LAST);