feat: add updated and brand sort options to /api/stations endpoint
Extends NearbyStationsRequest validation to accept `sort=updated` and `sort=brand`. Updates StationController to use match expression with dedicated closures: 'updated' sorts by price_effective_at descending (newest first), 'brand' sorts alphabetically by brand_name, with existing price and distance options.
This commit is contained in:
@@ -54,7 +54,12 @@ class StationController extends Controller
|
|||||||
|
|
||||||
$stations = $all
|
$stations = $all
|
||||||
->filter(fn ($s) => (float) $s->distance_km <= $radius)
|
->filter(fn ($s) => (float) $s->distance_km <= $radius)
|
||||||
->sortBy($sort === 'price' ? 'price_pence' : 'distance_km')
|
->sortBy(match ($sort) {
|
||||||
|
'price' => fn ($s) => (int) $s->price_pence,
|
||||||
|
'updated' => fn ($s) => $s->price_effective_at ? -strtotime($s->price_effective_at) : PHP_INT_MAX,
|
||||||
|
'brand' => fn ($s) => strtolower((string) $s->brand_name),
|
||||||
|
default => fn ($s) => (float) $s->distance_km,
|
||||||
|
})
|
||||||
->values();
|
->values();
|
||||||
|
|
||||||
$prices = $stations->pluck('price_pence');
|
$prices = $stations->pluck('price_pence');
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class NearbyStationsRequest extends FormRequest
|
|||||||
'lng' => ['required_without:postcode', 'nullable', 'numeric', 'between:-180,180'],
|
'lng' => ['required_without:postcode', 'nullable', 'numeric', 'between:-180,180'],
|
||||||
'fuel_type' => ['required', 'string'],
|
'fuel_type' => ['required', 'string'],
|
||||||
'radius' => ['nullable', 'numeric', 'between:0.1,50'],
|
'radius' => ['nullable', 'numeric', 'between:0.1,50'],
|
||||||
'sort' => ['nullable', 'string', 'in:price,distance'],
|
'sort' => ['nullable', 'string', 'in:price,distance,updated,brand'],
|
||||||
'pricing_mode' => ['nullable', 'string', 'in:pump'],
|
'pricing_mode' => ['nullable', 'string', 'in:pump'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user