From bbfa6393fad0e133b89ecb30252f439ff3aed42d Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 22 May 2026 00:41:47 -0500 Subject: [PATCH] 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) --- api/src/routes/fcc-lookup.ts | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/api/src/routes/fcc-lookup.ts b/api/src/routes/fcc-lookup.ts index b429aed..4537e49 100644 --- a/api/src/routes/fcc-lookup.ts +++ b/api/src/routes/fcc-lookup.ts @@ -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." }); + } } });