// Fix 2 publish — re-push the 68 STAGE-3 Final-Test-clean DSCA models to Hoffman. // Idempotent (Updated/Unchanged/Created); renderContent uses the new template; // null renders (count-guard) + FAIL certs + unregistered models auto-skip. const db = require('./database/db'); const { uploadBySerialNumbers } = require('./database/upload-to-api'); const clean = require('./_clean-models.json'); (async () => { const ph = clean.map((_, i) => '$' + (i + 1)).join(','); const rows = await db.query( `SELECT serial_number FROM test_records WHERE overall_result='PASS' AND model_number IN (${ph}) ORDER BY serial_number`, clean, ); const sns = rows.map(r => r.serial_number); console.log(`[PUSH] ${sns.length} PASS serials across ${clean.length} clean models`); const CHUNK = 1000; const tot = { created: 0, updated: 0, unchanged: 0, errors: 0, skipped: 0 }; for (let i = 0; i < sns.length; i += CHUNK) { const chunk = sns.slice(i, i + CHUNK); const r = await uploadBySerialNumbers(chunk); for (const k of Object.keys(tot)) tot[k] += r[k] || 0; console.log(`[PUSH] ${Math.min(i + CHUNK, sns.length)}/${sns.length} cumulative ` + `created=${tot.created} updated=${tot.updated} unchanged=${tot.unchanged} errors=${tot.errors} skipped=${tot.skipped}`); } console.log('[PUSH] COMPLETE ' + JSON.stringify(tot)); await db.close(); })().catch(e => { console.error('ERR', e.message, e.stack); process.exit(1); });