← back to York Reprice 2026 08

build-all-payloads.mjs

40 lines

import fs from 'node:fs';
const rows=JSON.parse(fs.readFileSync('data/phase1-enriched.json','utf8'));
let n=91508;
const slug=s=>String(s||'').toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'');
const payloads=rows.map(r=>{
  const SKU=`DWJS-${n++}`;
  const pn=(r.pattern_name||'').trim(), cw=(r.colorway||'').trim();
  const addCw = cw && !pn.toLowerCase().includes(cw.toLowerCase());
  const title=`${pn}${addCw?' '+cw:''} | Jeffrey Stevens`;
  const handle=slug(`${pn}-${cw}-wallpaper-${r.export_sku}`);
  const price=(+r.new_price).toFixed(2);
  const mf={}; const put=(k,v)=>{ if(v!==null&&v!==undefined&&String(v).trim()!=='') mf[k]=String(v); };
  put('custom.manufacturer_sku',r.export_sku); put('dwc.manufacturer_sku',r.export_sku);
  put('custom.pattern_name',pn); put('custom.collection_name',r.book_name);
  put('custom.brand_name',r.brand); put('custom.parent_brand',r.parent_brand);
  put('custom.us_msrp',r.us_msrp); put('custom.wholesale_price',r.wholesale);
  if(r.width_inches&&r.length_feet) put('global.width',`${r.width_inches}" x ${r.length_feet} ft`);
  put('custom.width',r.width_inches); put('global.length',r.length_feet?`${r.length_feet} ft`:'');
  put('global.repeat',r.pattern_repeat); put('custom.pattern_repeat',r.pattern_repeat);
  put('global.MATCH',r.match_type); put('custom.match_type',r.match_type);
  put('custom.backing',r.backing); put('specs.coverage',r.coverage);
  put('specs.style',r.marketing_style); put('specs.pattern',r.marketing_pattern);
  put('custom.color_family',r.color_family);
  put('global.unit_of_measure','Priced Per Single Roll');
  put('global.v_prods_quantity_order_min','2'); put('global.v_prods_quantity_order_units','2'); put('global.packaged','Shipped in Doubles');
  return { mfr_sku:r.export_sku, title, handle, vendor:'Jeffrey Stevens', productType:'Wallcovering', status:'DRAFT',
    descriptionHtml:r.dynamic_description||'',
    options:[{name:'Size',values:['Sample','Sold Per Single Roll']}],
    variants:[{sku:`${SKU}-Sample`,price:'4.25',option:'Sample',inventoryPolicy:'CONTINUE'},
              {sku:SKU,price,option:'Sold Per Single Roll',inventoryPolicy:'CONTINUE'}],
    image:r.image_url, metafields:mf };
});
fs.writeFileSync('data/york-new-phase1-payloads.json',JSON.stringify(payloads,null,1));
const brands={}; let noDesc=0,noImg=0,mf=[];
for(const p of payloads){const b=p.metafields['custom.parent_brand']||'?';brands[b]=(brands[b]||0)+1;if(!p.descriptionHtml)noDesc++;if(!p.image)noImg++;mf.push(Object.keys(p.metafields).length);}
console.log('payloads:',payloads.length,'| SKU',payloads[0].variants[1].sku,'->',payloads.at(-1).variants[1].sku);
console.log('by brand:',JSON.stringify(brands),'| avg metafields:',(mf.reduce((a,b)=>a+b,0)/mf.length).toFixed(1),'| missing desc:',noDesc,'img:',noImg);
console.log('unique variant SKUs:',new Set(payloads.flatMap(p=>p.variants.map(v=>v.sku))).size,'/',payloads.length*2,'| all DRAFT+priced:',payloads.every(p=>p.status==='DRAFT'&&+p.variants[1].price>0));
console.log('samples:'); payloads.slice(0,6).forEach(p=>console.log('  ',p.variants[1].sku,'|',p.title,'| $'+p.variants[1].price));