Filter walkers by distance and average rating, ensuring a minimum of 10 walkers displayed

This commit is contained in:
Max Mannstein 2025-08-24 13:08:22 +02:00
parent 9ee1164161
commit 69c293b7a7

View File

@ -549,15 +549,33 @@ namespace gehGassiApp.ViewModels
request.Distance = Location.CalculateDistance(CurrentLocation.Lat.Value, CurrentLocation.Lng.Value, request.Lat, request.Lng, DistanceUnits.Kilometers);
}
// Sortierung: Entfernung, dann mit Foto, dann mit Rating
Walkers = requests.Value
.OrderBy(x => x.Distance)
// Maximale Entfernung in Kilometern
const double maxDistanceKm = 2.0;
const int minWalkersCount = 10;
// Filtern nach Entfernung (max 2km), dann Sortierung: Bewertung, dann mit Foto, dann Entfernung
var filteredWalkers = requests.Value
.Where(x => x.Distance <= maxDistanceKm)
.OrderByDescending(x => x.AverageRating)
.ThenByDescending(x => !string.IsNullOrWhiteSpace(x.Photo))
.ThenByDescending(x => x.AverageRating > 0)
.ToObservableCollection();
.ThenBy(x => x.Distance)
.ToList();
// Falls weniger als 10 Walker in der 1km-Zone, weitere nach Entfernung hinzufügen
if (filteredWalkers.Count < minWalkersCount)
{
var additionalWalkers = requests.Value
.Where(x => x.Distance > maxDistanceKm)
.OrderBy(x => x.Distance)
.Take(minWalkersCount - filteredWalkers.Count);
filteredWalkers.AddRange(additionalWalkers);
}
Walkers = filteredWalkers.ToObservableCollection();
// Set First10Walkers for the home screen display
First10Walkers = requests.Value.Take(10).ToObservableCollection();
First10Walkers = filteredWalkers.Take(10).ToObservableCollection();
_total = requests.Total;
_skip = requests.Skip + requests.Take;