gigafibre-fsm/services/targo-hub/lib/address-search.js
louispaulb a510ac3848 Recherche d'adresses : base LOCALE (Postgres ERPNext) au lieu du Supabase cloud externe
Le hub n'appelle plus rddrjzptzhypltuzmere.supabase.co. La base RQA + dispo fibre est DÉJÀ locale
dans le Postgres ERPNext (rqa_addresses 5,24M + fiber_availability 21,6k jointes par address_id),
le hub y accède (réseau erpnext_erpnext + module pg).

- NOUVEAU lib/address-db.js : recherche locale. Phase 1 (civique présent) = filtre numero btree +
  mots de rue → ~20-150 ms ; Phase 2 (sans civique) = word_similarity (`<%` indexable GIN) au lieu de
  similarity() plein (24-76 s sur 5,24M !) → ~700 ms, dans une txn SET LOCAL (seuil 0.6 + statement_timeout 4s).
  Renvoie 2 formes : searchLocal (mappée, compat historique) + searchRaw (colonnes brutes de la fonction).
- address-search.js : searchAddresses + searchAddressesRpc délèguent à address-db (plus aucun appel Supabase).
  → onboarding (/address/validate), checkout (/api/address-search) ET le pont (géocodage) passent en LOCAL.
- address-validate.js : endpoints PUBLICS pour le site web (CORS) — POST /rpc/search_addresses (compat
  Supabase RPC, tableau direct) + GET /address/search — servis depuis le PG local (fiber_available inclus).
- server.js : route /rpc/ → address-validate.

Résultat pont (vérifié) : couverture 112/125 (vs 109 via Supabase), rqa_geocode 8→25 (table locale plus
complète + search_text désaccentué), Mapbox 37→23, no_coords 16→13, 0 erreur. Le local est meilleur.
Env hub : ADDR_DB_* dans /opt/targo-hub/.env (défauts erpnext-db-1/_eb65bdc0c4b1b2d6).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 15:46:47 -04:00

25 lines
1.1 KiB
JavaScript

'use strict'
/**
* address-search.js — façade de recherche d'adresses.
*
* Depuis 2026-06 la source est 100% LOCALE (Postgres ERPNext : rqa_addresses + fiber_availability,
* via ./address-db) — PLUS aucune dépendance au Supabase cloud externe. Les noms d'export restent
* stables pour les consommateurs existants : address-validate (/address/*), checkout (/api/address-search),
* legacy-dispatch-sync (géocodage du pont).
*/
const { searchLocal } = require('./address-db')
// Recherche d'adresses — forme historique (adresse_formatee, numero_municipal, numero_unite,
// odonyme_recompose_normal, nom_municipalite, code_postal, latitude, longitude,
// identifiant_unique_adresse, fiber_available, zone_tarifaire, max_speed, similarity_score).
async function searchAddresses (term, limit = 8) {
try { return await searchLocal(term, limit) } catch (e) { return [] }
}
// Alias historique (anciennement la RPC trigram Supabase) → désormais la même recherche locale.
async function searchAddressesRpc (term, limit = 8) {
return searchLocal(term, limit)
}
module.exports = { searchAddresses, searchAddressesRpc }