[object Object]

← back to Designer Wallcoverings

mirror repair-justindavid-relative-urls.js (98 relative-path image URLs fixed on Kamatera, verify-200 + backup TSV)

a406aeb80998c4e4251e35a5acafd9ffd98b5b40 · 2026-07-02 06:21:41 -0700 · Steve

Files touched

Diff

commit a406aeb80998c4e4251e35a5acafd9ffd98b5b40
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Jul 2 06:21:41 2026 -0700

    mirror repair-justindavid-relative-urls.js (98 relative-path image URLs fixed on Kamatera, verify-200 + backup TSV)
---
 .../scripts/repair-justindavid-relative-urls.js    | 27 ++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/shopify/scripts/repair-justindavid-relative-urls.js b/shopify/scripts/repair-justindavid-relative-urls.js
new file mode 100644
index 00000000..e3b59bc2
--- /dev/null
+++ b/shopify/scripts/repair-justindavid-relative-urls.js
@@ -0,0 +1,27 @@
+// Repair justindavid_catalog relative image paths -> absolute https://justindavid.com URLs.
+// Verify-then-update: HEAD each candidate, only UPDATE on HTTP 200 image/*. Backup TSV first.
+const { Pool } = require('pg');
+const fs = require('fs');
+const pool = new Pool({ connectionString: 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+const HOST = 'https://justindavid.com';
+(async () => {
+  const { rows } = await pool.query("SELECT id, mfr_sku, image_url FROM justindavid_catalog WHERE image_url LIKE '/%'");
+  console.log('relative-path rows:', rows.length);
+  const bak = '/root/DW-Agents/logs/justindavid-imgrepair-backup-20260702.tsv';
+  fs.writeFileSync(bak, rows.map(r => [r.id, r.mfr_sku, r.image_url].join('\t')).join('\n') + '\n');
+  let ok = 0, fail = 0;
+  for (const r of rows) {
+    const url = HOST + r.image_url;
+    try {
+      const res = await fetch(url, { method: 'HEAD', headers: { 'User-Agent': 'Mozilla/5.0' }, redirect: 'follow' });
+      const ct = res.headers.get('content-type') || '';
+      if (res.status === 200 && ct.startsWith('image/')) {
+        await pool.query('UPDATE justindavid_catalog SET image_url = $1 WHERE id = $2', [url, r.id]);
+        ok++;
+      } else { console.log('SKIP', r.mfr_sku, res.status, ct); fail++; }
+    } catch (e) { console.log('ERR', r.mfr_sku, e.message); fail++; }
+    await new Promise(s => setTimeout(s, 300));
+  }
+  console.log('repaired:', ok, 'failed:', fail, 'backup:', bak);
+  await pool.end();
+})();

← b9244f4b auto-save: 2026-07-02T05:41:14 (5 files) — pending-approval/  ·  back to Designer Wallcoverings  ·  audit: readiness re-run post-enrichment-complete (Lilycolor 0dadf149 →