feat(F-048): completed feature
This commit is contained in:
@@ -1,46 +1,47 @@
|
||||
// migration: 024_product_channels_attributes
|
||||
// Adds sales channels, featured flag, and attribute tags to the catalog_products table
|
||||
|
||||
/** @param {import('pg').Pool} pool */
|
||||
exports.up = async (pool) => {
|
||||
/** @param {import('node-pg-migrate').MigrationBuilder} pgm */
|
||||
exports.up = (pgm) => {
|
||||
// Add channels column
|
||||
await pool.query(`
|
||||
pgm.sql(`
|
||||
ALTER TABLE catalog_products
|
||||
ADD COLUMN IF NOT EXISTS channels TEXT NOT NULL DEFAULT 'all'
|
||||
CHECK (channels IN ('online', 'offline', 'all'))
|
||||
CHECK (channels IN ('online', 'offline', 'all'))
|
||||
`);
|
||||
|
||||
// Add featured column
|
||||
await pool.query(`
|
||||
pgm.sql(`
|
||||
ALTER TABLE catalog_products
|
||||
ADD COLUMN IF NOT EXISTS featured BOOLEAN NOT NULL DEFAULT FALSE
|
||||
`);
|
||||
|
||||
// Add attributes column (stored as JSONB array of strings)
|
||||
await pool.query(`
|
||||
pgm.sql(`
|
||||
ALTER TABLE catalog_products
|
||||
ADD COLUMN IF NOT EXISTS attributes JSONB NOT NULL DEFAULT '[]'::jsonb
|
||||
`);
|
||||
|
||||
// Add offer_cents and cost_cents to pricing_variant_prices
|
||||
await pool.query(`
|
||||
pgm.sql(`
|
||||
ALTER TABLE pricing_variant_prices
|
||||
ADD COLUMN IF NOT EXISTS offer_cents INTEGER,
|
||||
ADD COLUMN IF NOT EXISTS cost_cents INTEGER
|
||||
`);
|
||||
|
||||
// Create index for featured products (common query)
|
||||
await pool.query(`
|
||||
pgm.sql(`
|
||||
CREATE INDEX IF NOT EXISTS catalog_products_featured_idx
|
||||
ON catalog_products (featured) WHERE featured = TRUE
|
||||
`);
|
||||
};
|
||||
|
||||
exports.down = async (pool) => {
|
||||
await pool.query(`ALTER TABLE catalog_products DROP COLUMN IF EXISTS channels`);
|
||||
await pool.query(`ALTER TABLE catalog_products DROP COLUMN IF EXISTS featured`);
|
||||
await pool.query(`ALTER TABLE catalog_products DROP COLUMN IF EXISTS attributes`);
|
||||
await pool.query(`ALTER TABLE pricing_variant_prices DROP COLUMN IF EXISTS offer_cents`);
|
||||
await pool.query(`ALTER TABLE pricing_variant_prices DROP COLUMN IF EXISTS cost_cents`);
|
||||
await pool.query(`DROP INDEX IF EXISTS catalog_products_featured_idx`);
|
||||
/** @param {import('node-pg-migrate').MigrationBuilder} pgm */
|
||||
exports.down = (pgm) => {
|
||||
pgm.sql(`ALTER TABLE catalog_products DROP COLUMN IF EXISTS channels`);
|
||||
pgm.sql(`ALTER TABLE catalog_products DROP COLUMN IF EXISTS featured`);
|
||||
pgm.sql(`ALTER TABLE catalog_products DROP COLUMN IF EXISTS attributes`);
|
||||
pgm.sql(`ALTER TABLE pricing_variant_prices DROP COLUMN IF EXISTS offer_cents`);
|
||||
pgm.sql(`ALTER TABLE pricing_variant_prices DROP COLUMN IF EXISTS cost_cents`);
|
||||
pgm.sql(`DROP INDEX IF EXISTS catalog_products_featured_idx`);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user