Fall back to local DB when FCC name search is blocked

FCC/Akamai is blocking our server IP (403). Name search now falls back
to querying the local fcc_499_filers table (20K+ records) when the
live FCC search fails.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
justin 2026-05-22 00:41:47 -05:00
parent 33684a9152
commit bbfa6393fa

View file

@ -1329,8 +1329,34 @@ router.get("/api/v1/fcc/cores-search", async (req, res) => {
source: "FCC Form 499 Filer Database",
});
} catch (err: any) {
console.error("[fcc-cores-search] Error:", err);
res.status(500).json({ error: "FCC search failed: " + (err.message || "unknown error") });
// FCC is down or blocking us — fall back to local database
console.warn("[fcc-cores-search] FCC search failed, falling back to local DB:", err.message);
try {
const localResults = await pool.query(
`SELECT filer_id, legal_name, trade_name AS dba, frn
FROM fcc_499_filers
WHERE legal_name ILIKE $1 OR trade_name ILIKE $1
ORDER BY legal_name
LIMIT 50`,
[`%${name}%`],
);
const enriched = localResults.rows.map((r: any) => ({
filer_id: r.filer_id,
legal_name: r.legal_name,
dba: r.dba || "",
frn: r.frn || null,
}));
res.json({
results: enriched,
count: enriched.length,
total_found: enriched.length,
query: name,
source: "Local database (FCC search temporarily unavailable)",
});
} catch (dbErr: any) {
console.error("[fcc-cores-search] Local fallback also failed:", dbErr);
res.status(500).json({ error: "Search is temporarily unavailable. Please try again later or search by FRN." });
}
}
});