← back to Dw Silver Mylar Rename

rollback.mjs

28 lines

// UNDO: re-apply the restore-map in reverse — sets title/descriptionHtml BACK to
// the original "Silver Mylar" values. Usage: node rollback.mjs [--ids gid,gid]
import { readFileSync } from 'node:fs';
import { gql } from './lib.mjs';

const rm = JSON.parse(readFileSync(new URL('./data/restore-map.json', import.meta.url)));
const args = process.argv.slice(2);
const idsArg = args.includes('--ids') ? new Set(args[args.indexOf('--ids') + 1].split(',')) : null;

const M = `mutation($input: ProductInput!){
  productUpdate(input:$input){ product{ id } userErrors{ field message } }
}`;
let ok = 0, fail = 0;
for (const e of rm.restore) {
  if (idsArg && !idsArg.has(e.gid)) continue;
  const input = { id: e.gid };
  if (e.fields.title) input.title = e.fields.title.to;             // .to = original value
  if (e.fields.descriptionHtml) input.descriptionHtml = e.fields.descriptionHtml.to;
  if (!input.title && !input.descriptionHtml) continue;
  try {
    const d = await gql(M, { input });
    const ue = d.productUpdate.userErrors;
    if (ue && ue.length) throw new Error(JSON.stringify(ue));
    ok++;
  } catch (err) { fail++; console.log('ROLLBACK FAIL', e.gid, String(err.message || err)); }
}
console.log(`rollback DONE ok=${ok} fail=${fail}`);