This commit is contained in:
hackerESQ
2025-04-12 21:25:00 -05:00
parent 3eb9bad840
commit c691ee922a
+10 -12
View File
@@ -146,26 +146,20 @@ class CurrencyRate extends Model
dump('got currencies');
// call api in chunks
$rates = [];
foreach (collect($period)->chunk(500) as $chunk) {
dump('calling frankf time series');
$chunkRates = Frankfurter::setSymbols($currencies)->timeSeries($chunk->min(), $chunk->max());
$rates = array_merge($rates, Arr::get($chunkRates, 'rates', []));
}
dump('done with frankf', count($rates));
$rates = Arr::get($chunkRates, 'rates', []);
// loop through each date
$updates = [];
$datesWithRates = array_keys($rates);
sort($datesWithRates);
foreach ($period as $date) {
foreach ($chunk as $date) {
$lookupDate = self::getNearestPastDate($date, $datesWithRates);
$lookupDate = self::getNearestPastDate($date, $rates);
if (is_null($lookupDate)) {
continue;
@@ -184,13 +178,14 @@ class CurrencyRate extends Model
];
}
}
dump('inserting');
// persist
self::chunkInsert($updates);
}
}
dump('done');
return collect($updates)
@@ -205,11 +200,14 @@ class CurrencyRate extends Model
private static function getNearestPastDate(CarbonInterface $date, array $rates): ?CarbonInterface
{
$datesWithRates = array_keys($rates);
sort($datesWithRates);
// get rates or find closest valid rate (handles missing weekend rates)
while (! isset($rates[$date->toDateString()])) {
// is this the start of a range that falls on a weekend?
if ($date->lessThan($first_date = Carbon::parse($rates[0]))) {
if ($date->lessThan($first_date = Carbon::parse($datesWithRates[0]))) {
$date = $first_date;
break;