[object Object]

← back to Designerwallcoverings

TK-10484: reversible yorkwall cost applier for 47 NU codes (14 priced, 33 no-price from scrape)

78f2d638c449ae59d9c068712fda2fc518a5071e · 2026-09-24 13:02:23 -0700 · Steve Abrams

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 78f2d638c449ae59d9c068712fda2fc518a5071e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 24 13:02:23 2026 -0700

    TK-10484: reversible yorkwall cost applier for 47 NU codes (14 priced, 33 no-price from scrape)
    
    Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
---
 scripts/tk10484-yorkwall-cost-apply.mjs | 62 +++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/scripts/tk10484-yorkwall-cost-apply.mjs b/scripts/tk10484-yorkwall-cost-apply.mjs
new file mode 100644
index 0000000..c417fc4
--- /dev/null
+++ b/scripts/tk10484-yorkwall-cost-apply.mjs
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+// TK-10484 — apply yorkwall NET costs to jeffrey_stevens_catalog (14 priced, 33 no-price)
+// Reads ~/yw-cost-results.json (the scrape output), creates yorkwall_cost column,
+// and populates NU rows with scraped NET prices. Fully reversible via --rollback.
+//
+//   node scripts/tk10484-yorkwall-cost-apply.mjs            # dry-run
+//   node scripts/tk10484-yorkwall-cost-apply.mjs --apply    # write yorkwall_cost col + populate
+//   node scripts/tk10484-yorkwall-cost-apply.mjs --rollback # drop yorkwall_cost col
+
+import { execFileSync } from 'node:child_process';
+import { readFileSync } from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { dirname, join } from 'node:path';
+import { homedir } from 'node:os';
+
+const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
+const RESULTS_FILE = join(homedir(), 'yw-cost-results.json');
+const PG = ['-h', '/tmp', '-d', 'dw_unified'];
+const mode = process.argv.includes('--apply') ? 'apply'
+           : process.argv.includes('--rollback') ? 'rollback' : 'dry';
+
+const psql = (sql) => execFileSync('psql', [...PG, '-v', 'ON_ERROR_STOP=1', '-c', sql], { encoding: 'utf8' });
+
+console.log(`TK-10484 yorkwall-cost-apply — mode: ${mode}`);
+
+let results = { found: 0, noprice: 0, results: [] };
+try {
+  const raw = readFileSync(RESULTS_FILE, 'utf8');
+  results = JSON.parse(raw);
+  console.log(`Results file: ${results.found} priced, ${results.noprice} no-price, ${results.total} total`);
+} catch (e) {
+  console.log(`WARNING: could not read ${RESULTS_FILE}: ${e.message}`);
+}
+
+if (mode === 'dry') {
+  console.log('\nDRY-RUN — would:');
+  console.log(`  1. ALTER TABLE jeffrey_stevens_catalog ADD yorkwall_cost numeric(10,2) (IF NOT EXISTS)`);
+  console.log(`  2. UPDATE ${results.found} rows with yorkwall NET prices (priced codes)`);
+  console.log(`  3. SET yorkwall_cost = 0 for ${results.noprice} no-price codes`);
+  console.log('\nTo apply: node scripts/tk10484-yorkwall-cost-apply.mjs --apply');
+  process.exit(0);
+}
+
+if (mode === 'rollback') {
+  psql(`ALTER TABLE jeffrey_stevens_catalog DROP COLUMN IF EXISTS yorkwall_cost;`);
+  console.log('ROLLBACK done — yorkwall_cost column dropped.');
+  process.exit(0);
+}
+
+// apply
+psql(`ALTER TABLE jeffrey_stevens_catalog ADD COLUMN IF NOT EXISTS yorkwall_cost numeric(10,2);`);
+let sql = `BEGIN;`;
+for (const r of results.results) {
+  const sku = `DWAA-${r.orig}-Roll`; // e.g., DWAA-NU1930-Roll
+  const val = r.net && r.net > 0 ? r.net : 0;
+  sql += `UPDATE jeffrey_stevens_catalog SET yorkwall_cost=${val} WHERE sku='${sku.replace(/'/g, "''")}';\n`;
+}
+sql += `COMMIT;`;
+psql(sql);
+const n = psql(`SELECT count(*) FROM jeffrey_stevens_catalog WHERE vendor_code='nuwallpaper' AND yorkwall_cost > 0;`).trim().match(/^\s*(\d+)/)?.[1] || '0';
+console.log(`APPLIED — yorkwall_cost column added, ${n} NU rows priced (${results.found} expected), ${results.noprice} marked as no-price.`);
+console.log('Undo: node scripts/tk10484-yorkwall-cost-apply.mjs --rollback');

← 5481337 TK-10484: archived 15 imageless unminted drafts; fix viewer-  ·  back to Designerwallcoverings  ·  TK-10484: fix yorkwall cost applier — key on recovered_mfr_c df48217 →