sasdsad
All checks were successful
Deploy / deploy-staging (push) Successful in 5s
Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-05-01 03:44:52 +02:00
parent aff9dd30e1
commit d5e9d588cd

View File

@@ -802,7 +802,7 @@ final class Router
{ {
$settings = $settingsOverride ?? $this->settings($projectKey); $settings = $settingsOverride ?? $this->settings($projectKey);
$rows = $this->repository()->listMeasurements($projectKey, 500); $rows = $this->repository()->listMeasurements($projectKey, 500);
$rows = $this->ensureMeasurementFxReferences($projectKey, $rows); $rows = $this->ensureMeasurementFxReferences($projectKey, $rows, $settings);
return $this->analytics()->enrichMeasurements($rows, $settings); return $this->analytics()->enrichMeasurements($rows, $settings);
} }
@@ -1583,11 +1583,14 @@ final class Router
return $result; return $result;
} }
private function resolveMeasurementFxFetchId(string $projectKey, array $payload, bool $allowRefresh): ?int private function resolveMeasurementFxFetchId(string $projectKey, array $payload, bool $allowRefresh, ?float $maxAgeHoursOverride = null): ?int
{ {
$measuredAt = trim((string) ($payload['measured_at'] ?? '')); $measuredAt = trim((string) ($payload['measured_at'] ?? ''));
$settings = $this->settings($projectKey); $maxAgeHours = $maxAgeHoursOverride;
$maxAgeHours = is_numeric($settings['fx_max_age_hours'] ?? null) ? (float) $settings['fx_max_age_hours'] : 3.0; if ($maxAgeHours === null) {
$settings = $this->settings($projectKey);
$maxAgeHours = is_numeric($settings['fx_max_age_hours'] ?? null) ? (float) $settings['fx_max_age_hours'] : 3.0;
}
if ($allowRefresh && $measuredAt !== '' && $this->isRecentTimestamp($measuredAt, $maxAgeHours)) { if ($allowRefresh && $measuredAt !== '' && $this->isRecentTimestamp($measuredAt, $maxAgeHours)) {
$fresh = $this->fx()->ensureFreshLatestRates($maxAgeHours, 'USD'); $fresh = $this->fx()->ensureFreshLatestRates($maxAgeHours, 'USD');
@@ -1618,8 +1621,10 @@ final class Router
return null; return null;
} }
private function ensureMeasurementFxReferences(string $projectKey, array $rows): array private function ensureMeasurementFxReferences(string $projectKey, array $rows, ?array $settings = null): array
{ {
$maxAgeHours = is_numeric($settings['fx_max_age_hours'] ?? null) ? (float) $settings['fx_max_age_hours'] : 3.0;
$resolvedByTimestamp = [];
$resolved = []; $resolved = [];
foreach ($rows as $row) { foreach ($rows as $row) {
if (!is_array($row)) { if (!is_array($row)) {
@@ -1628,9 +1633,18 @@ final class Router
$fetchId = is_numeric($row['fx_fetch_id'] ?? null) ? (int) $row['fx_fetch_id'] : 0; $fetchId = is_numeric($row['fx_fetch_id'] ?? null) ? (int) $row['fx_fetch_id'] : 0;
if ($fetchId <= 0) { if ($fetchId <= 0) {
$resolvedFetchId = $this->resolveMeasurementFxFetchId($projectKey, $row, false); $measuredAt = trim((string) ($row['measured_at'] ?? ''));
if ($measuredAt !== '' && array_key_exists($measuredAt, $resolvedByTimestamp)) {
$resolvedFetchId = $resolvedByTimestamp[$measuredAt];
} else {
$resolvedFetchId = $this->resolveMeasurementFxFetchId($projectKey, $row, false, $maxAgeHours);
if ($measuredAt !== '') {
$resolvedByTimestamp[$measuredAt] = $resolvedFetchId;
}
}
if ($resolvedFetchId !== null) { if ($resolvedFetchId !== null) {
$row = $this->repository()->setMeasurementFxFetchId($projectKey, (int) ($row['id'] ?? 0), $resolvedFetchId) ?? array_merge($row, ['fx_fetch_id' => $resolvedFetchId]); $row['fx_fetch_id'] = $resolvedFetchId;
} }
} }