/** * Catalog product variants and rich product data. */ /** @param {import('node-pg-migrate').MigrationBuilder} pgm */ export const up = (pgm) => { pgm.sql(` CREATE TABLE catalog_product_variants ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), product_id uuid NOT NULL REFERENCES catalog_products(id) ON DELETE CASCADE, sku text NOT NULL UNIQUE, ean text UNIQUE, attributes jsonb NOT NULL DEFAULT '{}'::jsonb, created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now() ) `); pgm.sql( 'CREATE INDEX catalog_product_variants_product_id_idx ON catalog_product_variants (product_id)', ); pgm.sql(` CREATE TABLE catalog_product_rich_data ( product_id uuid PRIMARY KEY REFERENCES catalog_products(id) ON DELETE CASCADE, ingredients text, allergens text[] NOT NULL DEFAULT ARRAY[]::text[], nutrition jsonb, nutrition_source text, is_organic boolean NOT NULL DEFAULT false, organic_certification text, created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now(), CONSTRAINT catalog_product_rich_data_nutrition_source_check CHECK (nutrition_source IS NULL OR nutrition_source IN ('manual', 'manufacturer', 'openfoodfacts')), CONSTRAINT catalog_product_rich_data_nutrition_source_required_check CHECK (nutrition IS NULL OR nutrition_source IS NOT NULL) ) `); }; /** @param {import('node-pg-migrate').MigrationBuilder} pgm */ export const down = (pgm) => { pgm.sql('DROP TABLE IF EXISTS catalog_product_rich_data'); pgm.sql('DROP TABLE IF EXISTS catalog_product_variants'); };