← back to Novasuede Min Fix

enum-positions.mjs

42 lines

import fs from 'fs';
const env=fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8');
const get=k=>(env.match(new RegExp('^'+k+'=(.*)$','m'))||[])[1];
const TOKEN=get('SHOPIFY_ADMIN_TOKEN');
const API='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
async function gql(q,v={}){const r=await fetch(API,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});return r.json();}
let after=null, all=[];
const Q=`query($after:String){
  products(first:100, after:$after, query:"vendor:Novasuede status:active"){
    pageInfo{ hasNextPage endCursor }
    nodes{
      id title handle status
      variants(first:10){ nodes{ id title sku position availableForSale } }
    }
  }
}`;
while(true){
  const r=await gql(Q,{after});
  if(r.errors){console.log(JSON.stringify(r.errors));break;}
  const c=r.data.products;
  all.push(...c.nodes);
  if(!c.pageInfo.hasNextPage) break;
  after=c.pageInfo.endCursor;
}
console.log('active Novasuede products:',all.length);
// classify: which variant is FIRST-AVAILABLE (Shopify default) — and is it Per Yard?
let perYardFirst=0, wrongFirst=0, noPerYard=0, examples=[];
for(const p of all){
  const vs=[...p.variants.nodes].sort((a,b)=>a.position-b.position);
  const firstAvail=vs.find(v=>v.availableForSale) || vs[0];
  const isPerYard = /per yard/i.test(firstAvail.title) && !/wallcover/i.test(firstAvail.title);
  const hasPerYard = vs.some(v=>/per yard/i.test(v.title)&&!/wallcover/i.test(v.title));
  if(!hasPerYard){ noPerYard++; }
  else if(isPerYard) perYardFirst++;
  else { wrongFirst++; if(examples.length<12) examples.push({title:p.title, handle:p.handle, firstAvail:firstAvail.title, order:vs.map(v=>v.position+':'+v.title)}); }
}
console.log('Per Yard is first-available (defaults correct):',perYardFirst);
console.log('WRONG first-available (needs reorder):',wrongFirst);
console.log('no Per Yard variant at all:',noPerYard);
console.log('examples of WRONG:'); examples.forEach(e=>console.log('  -',e.handle,'| firstAvail="'+e.firstAvail+'" | order='+JSON.stringify(e.order)));
fs.writeFileSync('positions-enum.json',JSON.stringify(all,null,2));