[object Object]

← back to Contractwallpaper

auto-save: 2026-07-28T12:30:33 (1 files) — tmp-kravet-alldata.mjs

1124c80dd1b3653bde3eb111d3a8790c358d6f73 · 2026-07-28 12:30:40 -0700 · Steve Abrams

Files touched

Diff

commit 1124c80dd1b3653bde3eb111d3a8790c358d6f73
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jul 28 12:30:40 2026 -0700

    auto-save: 2026-07-28T12:30:33 (1 files) — tmp-kravet-alldata.mjs
---
 tmp-kravet-alldata.mjs | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/tmp-kravet-alldata.mjs b/tmp-kravet-alldata.mjs
index d74fc1e..0fd43bb 100644
--- a/tmp-kravet-alldata.mjs
+++ b/tmp-kravet-alldata.mjs
@@ -35,8 +35,13 @@ const rows=execFileSync('psql',['-h','/tmp','-d','dw_unified','-tA','-F','|','-c
     AND s.vendor ILIKE ANY(ARRAY['%brunschwig%','%lee jofa%','%kravet%','%cole%','%baker%','%mulberry%','%clarke%','%groundworks%','%colefax%','%threads%','%andrew martin%','%aerin%','%barclay%','%thom filicia%'])
   ORDER BY s.sku ${LIMIT?`LIMIT ${LIMIT}`:''};`]).toString().trim().split('\n').map(l=>{const[sku,id,mfr]=l.split('|');return{sku,id,mfr};});
 
+// resume ledger (so a watchdog restart continues instead of redoing everything)
+const MF_LEDGER='/Users/macstudio3/kravet-feed-pull/alldata-done.txt';
+const mfDone=new Set(fs.existsSync(MF_LEDGER)?fs.readFileSync(MF_LEDGER,'utf8').trim().split('\n').filter(Boolean):[]);
+const rows2=rows.filter(r=>!mfDone.has(r.sku));
+
 // bulk-load the feed rows we need into a JS map keyed by mfr, using a single psql dump
-const wanted=[...new Set(rows.map(r=>r.mfr))];
+const wanted=[...new Set(rows2.map(r=>r.mfr))];
 const sel=cols.join(',');
 const feed={};
 // chunk the IN() to keep query size sane
@@ -46,12 +51,12 @@ for(let i=0;i<wanted.length;i+=2000){
     `SELECT upper(c1), ${sel} FROM kravet_feed_stage WHERE upper(c1) IN (${chunk});`],{maxBuffer:1<<28}).toString().trim();
   for(const line of out.split('\n')){ if(!line)continue; const parts=line.split('\t'); const key=parts[0]; feed[key]=parts.slice(1); }
 }
-console.log(`targets:${rows.length}  feed rows loaded:${Object.keys(feed).length}`);
+console.log(`targets:${rows2.length} (of ${rows.length}, ${mfDone.size} already done)  feed rows loaded:${Object.keys(feed).length}`);
 
 let ok=0,fail=0,totalMF=0;
-for(const {sku,id,mfr} of rows){
+for(const {sku,id,mfr} of rows2){
   try{
-    const vals=feed[mfr]; if(!vals){fail++;continue;}
+    const vals=feed[mfr]; if(!vals){fail++;fs.appendFileSync(MF_LEDGER,sku+'\n');continue;}
     const mfs=[];
     cols.forEach((c,idx)=>{
       const hdr=hmap[c]; if(SKIP.has(hdr)) return;
@@ -65,8 +70,8 @@ for(const {sku,id,mfr} of rows){
       const errs=d.metafieldsSet.userErrors; if(errs.length) throw new Error(JSON.stringify(errs).slice(0,160));
       await sleep(120);
     }
-    ok++; totalMF+=mfs.length;
-    if(ok%200===0) console.log(`  ...${ok}/${rows.length}  (${totalMF} metafields, ${fail} fail)`);
+    ok++; totalMF+=mfs.length; fs.appendFileSync(MF_LEDGER,sku+'\n');
+    if(ok%200===0) console.log(`  ...${ok}/${rows2.length}  (${totalMF} metafields, ${fail} fail)`);
   }catch(e){ fail++; if(fail<=20)console.error(`  FAIL ${sku}: ${e.message}`); }
   await sleep(90);
 }

← 59e9f3f auto-save: 2026-07-28T11:00:01 (2 files) — tmp-kravet-alldat  ·  back to Contractwallpaper  ·  corner-nav: live as-you-type search with thumbnail previews 7edf9de →