fix: guard malformed postcodes.io responses and isolate persist errors from HTTP success

This commit is contained in:
Ovidiu U
2026-04-22 12:22:15 +01:00
parent 45bf1c0d24
commit d460de1850

View File

@@ -122,6 +122,10 @@ class PostcodeService
$data = $response->json('result');
if (! is_array($data) || ! isset($data['postcode'], $data['latitude'], $data['longitude'])) {
return null;
}
$result = new LocationResult(
query: $postcode,
displayName: $data['postcode'],
@@ -129,14 +133,21 @@ class PostcodeService
lng: $data['longitude'],
);
Postcode::updateOrCreate(
['postcode' => $normalised],
[
'outcode' => substr($normalised, 0, strlen($normalised) - 3),
'lat' => $data['latitude'],
'lng' => $data['longitude'],
],
);
try {
Postcode::updateOrCreate(
['postcode' => $normalised],
[
'outcode' => substr($normalised, 0, strlen($normalised) - 3),
'lat' => $data['latitude'],
'lng' => $data['longitude'],
],
);
} catch (Throwable $e) {
Log::warning('PostcodeService: failed to persist postcode after HTTP fallback', [
'postcode' => $normalised,
'error' => $e->getMessage(),
]);
}
return $result;
} catch (Throwable $e) {
@@ -163,6 +174,10 @@ class PostcodeService
$data = $response->json('result');
if (! is_array($data) || ! isset($data['outcode'], $data['latitude'], $data['longitude'])) {
return null;
}
$result = new LocationResult(
query: $outcode,
displayName: $data['outcode'],
@@ -170,13 +185,20 @@ class PostcodeService
lng: $data['longitude'],
);
Outcode::updateOrCreate(
['outcode' => $normalised],
[
'lat' => $data['latitude'],
'lng' => $data['longitude'],
],
);
try {
Outcode::updateOrCreate(
['outcode' => $normalised],
[
'lat' => $data['latitude'],
'lng' => $data['longitude'],
],
);
} catch (Throwable $e) {
Log::warning('PostcodeService: failed to persist outcode after HTTP fallback', [
'outcode' => $normalised,
'error' => $e->getMessage(),
]);
}
return $result;
} catch (Throwable $e) {