← back to Novasuede Min Fix

plan.mjs

29 lines

import fs from 'fs';
const all = JSON.parse(fs.readFileSync('live-novasuede.json','utf8'));
const changes=[]; // {productId,title, prodMin_old,prodMin_new, perYardVariantId, perYardMin_old, perYardMin_new}
for(const p of all){
  const pm = p.metafields.nodes.find(m=>m.namespace==='global'&&m.key==='v_prods_quantity_order_min');
  const prodMinOld = pm?pm.value:null;
  const perYard = p.variants.nodes.find(v=>/Per Yard \(5 yd min\)/.test(v.title) || (/^Sold Per Yard/.test(v.title)));
  const vm = perYard? perYard.metafields.nodes.find(m=> m.namespace==='custom' && (m.key==='v_prod_quantity_order_min')) : null;
  const vMinOld = vm?vm.value:null;
  const needProd = prodMinOld !== '5';
  const needVar  = perYard && vMinOld !== '5';
  if(needProd || needVar){
    changes.push({
      productId:p.id, title:p.title, handle:p.handle,
      prodMin_old:prodMinOld, prodMin_new: needProd?'5':prodMinOld, prodMin_change:needProd,
      perYardVariantId: perYard?perYard.id:null, perYardSku: perYard?perYard.sku:null,
      perYardMin_old:vMinOld, perYardMin_new: needVar?'5':vMinOld, perYardMin_change:needVar
    });
  }
}
fs.writeFileSync('restore-map.json', JSON.stringify(changes,null,2));
console.log('Products needing ANY change:', changes.length);
console.log('  product-level min changes:', changes.filter(c=>c.prodMin_change).length);
console.log('  per-yard variant min changes:', changes.filter(c=>c.perYardMin_change).length);
console.log('  already fully correct (no change):', all.length-changes.length);
// sanity: is Salt in the list?
const salt=changes.find(c=>/salt/i.test(c.title));
console.log('\nSalt entry:', JSON.stringify(salt));