mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-01 19:23:27 +00:00
CbeExchangeProvider fetched the CBE daily-exchange-rates payload, read the USD entry out of it and threw the other seventeen away — getBaseRate() returned null for anything but USD to ETB. The feed already publishes DJF in that same payload (0.9203 ETB per DJF today), so serving more than one pair costs no extra request. The provider now parses the whole record into a code to ETB map and caches that, keyed by ISO code. Entries CBE publishes as 0 or null are skipped rather than stored — a zero rate would silently zero an invoice line. ExchangeService gains a fourth resolution step. DJF to USD is neither a direct pair nor an inverse of one, because the provider only ever quotes against ETB, so the two ETB legs are crossed instead of the pair being declared unavailable. Fallbacks stay a single stored number. DJF is hard-pegged to USD at 177.721, so the offline legs derive from the stored USD rate through the peg — that reproduces CBE's own DJF quote to four decimals, and a second persisted rate would only be a second thing that can go stale. getRatesFromUsd() resolves a whole pricing pass's conversions up front so line builders do not await inside a loop. Because it asks for several codes concurrently, a cold cache would have opened one HTTP request per currency for the same payload; an in-flight promise is now shared. The spec lives in freight-api because api-common has no test setup of its own, and adding one for a single file is not worth the framework.