← back to Commercialrealestate

scripts/db/load-fha-condos.js

32 lines

// load-fha-condos.js — load data/fha-approved-condos.json into the cre DB's fha_condo reference table.
// Idempotent upsert keyed on (condo_id, submission, project_name). Run after fetch-fha-condos.js.
'use strict';
const fs = require('fs');
const path = require('path');
const { pool } = require('./brokers-db');

async function main() {
  const file = path.join(__dirname, '..', '..', 'data', 'fha-approved-condos.json');
  const { condos } = JSON.parse(fs.readFileSync(file, 'utf8'));
  let n = 0;
  for (const c of condos) {
    await pool.query(
      `INSERT INTO fha_condo(condo_id, submission, project_name, address, city, zip, county,
         composition, fha_concentration, approval_method, hud_status, status_date, expiration_date, warrant_signal)
       VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)
       ON CONFLICT (condo_id, submission, project_name) DO UPDATE SET
         address=EXCLUDED.address, city=EXCLUDED.city, zip=EXCLUDED.zip,
         hud_status=EXCLUDED.hud_status, expiration_date=EXCLUDED.expiration_date,
         warrant_signal=EXCLUDED.warrant_signal, fetched_at=now()`,
      [c.condo_id, c.submission || '', c.project_name, c.address, c.city, c.zip, c.county,
       c.composition, c.fha_concentration, c.approval_method, c.status, c.status_date,
       c.expiration_date, c.warrant_signal]);
    n++;
  }
  const r = await pool.query(`SELECT warrant_signal, count(*) FROM fha_condo GROUP BY warrant_signal ORDER BY 2 DESC`);
  console.log(`Loaded ${n} fha_condo rows.`);
  r.rows.forEach(x => console.log('  ', x.warrant_signal, x.count));
  await pool.end();
}
main().catch(e => { console.error('FATAL', e.message); process.exit(1); });