← 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
A shopify/scripts/repair-justindavid-relative-urls.js
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 →