CREATE TABLE "categories" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "categories_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "externalId" integer, "name" varchar(255) NOT NULL, "parentId" integer, "description" text, "createdAt" timestamp DEFAULT now() NOT NULL, "updatedAt" timestamp DEFAULT now() ); --> statement-breakpoint CREATE TABLE "products" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "products_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "externalId" varchar(50) NOT NULL, "storeId" integer NOT NULL, "categoryId" integer, "name" varchar(500) NOT NULL, "description" text, "url" text, "imageUrl" text, "currentPrice" numeric(10, 2) NOT NULL, "unit" varchar(50), "weight" varchar(100), "brand" varchar(255), "oldPrice" numeric(10, 2), "discountPercent" numeric(5, 2), "promotionEndDate" timestamp, "rating" numeric(3, 2), "scoresCount" integer, "commentsCount" integer, "quantity" integer, "badges" text, "isDetailsFetched" boolean DEFAULT false NOT NULL, "createdAt" timestamp DEFAULT now() NOT NULL, "updatedAt" timestamp DEFAULT now(), CONSTRAINT "products_externalId_storeId_unique" UNIQUE("externalId","storeId") ); --> statement-breakpoint CREATE TABLE "scraping_sessions" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "scraping_sessions_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "storeId" integer NOT NULL, "sourceType" varchar(50) NOT NULL, "status" varchar(50) NOT NULL, "startedAt" timestamp DEFAULT now() NOT NULL, "finishedAt" timestamp, "error" text ); --> statement-breakpoint CREATE TABLE "stores" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "stores_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "name" varchar(255) NOT NULL, "type" varchar(50) NOT NULL, "code" varchar(50), "url" text, "region" varchar(255), "address" text, "createdAt" timestamp DEFAULT now() NOT NULL, "updatedAt" timestamp DEFAULT now() ); --> statement-breakpoint ALTER TABLE "products" ADD CONSTRAINT "products_storeId_stores_id_fk" FOREIGN KEY ("storeId") REFERENCES "public"."stores"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "products" ADD CONSTRAINT "products_categoryId_categories_id_fk" FOREIGN KEY ("categoryId") REFERENCES "public"."categories"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "scraping_sessions" ADD CONSTRAINT "scraping_sessions_storeId_stores_id_fk" FOREIGN KEY ("storeId") REFERENCES "public"."stores"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint CREATE INDEX "categories_externalId_idx" ON "categories" USING btree ("externalId");--> statement-breakpoint CREATE INDEX "categories_parentId_idx" ON "categories" USING btree ("parentId");--> statement-breakpoint CREATE INDEX "products_storeId_idx" ON "products" USING btree ("storeId");--> statement-breakpoint CREATE INDEX "products_categoryId_idx" ON "products" USING btree ("categoryId");--> statement-breakpoint CREATE INDEX "products_externalId_idx" ON "products" USING btree ("externalId");--> statement-breakpoint CREATE INDEX "scraping_sessions_storeId_idx" ON "scraping_sessions" USING btree ("storeId");--> statement-breakpoint CREATE INDEX "scraping_sessions_status_idx" ON "scraping_sessions" USING btree ("status");--> statement-breakpoint CREATE INDEX "scraping_sessions_startedAt_idx" ON "scraping_sessions" USING btree ("startedAt");--> statement-breakpoint CREATE INDEX "stores_code_idx" ON "stores" USING btree ("code");