From 69c293b7a774ac4596e5f08f61737110d36cd064 Mon Sep 17 00:00:00 2001 From: Max Mannstein Date: Sun, 24 Aug 2025 13:08:22 +0200 Subject: [PATCH] Filter walkers by distance and average rating, ensuring a minimum of 10 walkers displayed --- .../gehGassiApp/ViewModels/HomeViewModel.cs | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/gehGassiApp/gehGassiApp/ViewModels/HomeViewModel.cs b/gehGassiApp/gehGassiApp/ViewModels/HomeViewModel.cs index bad785c..57d9609 100644 --- a/gehGassiApp/gehGassiApp/ViewModels/HomeViewModel.cs +++ b/gehGassiApp/gehGassiApp/ViewModels/HomeViewModel.cs @@ -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;