← back to Novasuede Min Fix

revert.mjs

29 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';
const changes=JSON.parse(fs.readFileSync(new URL('./restore-map.json',import.meta.url)));
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();}
const SET=`mutation($mf:[MetafieldsSetInput!]!){metafieldsSet(metafields:$mf){userErrors{field message}}}`;
const DEL=`mutation($mf:[MetafieldIdentifierInput!]!){metafieldsDelete(metafields:$mf){deletedMetafields{key} userErrors{field message}}}`;
let restored=0,deleted=0,err=0;
for(const c of changes){
  // product-level
  if(c.prodMin_change){
    if(c.prodMin_old===null||c.prodMin_old===undefined){
      const r=await gql(DEL,{mf:[{ownerId:c.productId,namespace:'global',key:'v_prods_quantity_order_min'}]}); if(r?.data?.metafieldsDelete?.userErrors?.length){err++} else deleted++;
    } else {
      const r=await gql(SET,{mf:[{ownerId:c.productId,namespace:'global',key:'v_prods_quantity_order_min',type:'single_line_text_field',value:String(c.prodMin_old)}]}); if(r?.data?.metafieldsSet?.userErrors?.length){err++} else restored++;
    }
  }
  if(c.perYardMin_change){
    if(c.perYardMin_old===null||c.perYardMin_old===undefined){
      const r=await gql(DEL,{mf:[{ownerId:c.perYardVariantId,namespace:'custom',key:'v_prod_quantity_order_min'}]}); if(r?.data?.metafieldsDelete?.userErrors?.length){err++} else deleted++;
    } else {
      const r=await gql(SET,{mf:[{ownerId:c.perYardVariantId,namespace:'custom',key:'v_prod_quantity_order_min',type:'single_line_text_field',value:String(c.perYardMin_old)}]}); if(r?.data?.metafieldsSet?.userErrors?.length){err++} else restored++;
    }
  }
}
console.log('REVERT complete. restored:',restored,' deleted(back-to-absent):',deleted,' errors:',err);