init
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
using TrainingPlanner.Domain;
|
||||
|
||||
namespace TrainingPlanner.Application;
|
||||
|
||||
public static class ExerciseSearch
|
||||
{
|
||||
public static List<LibraryExercise> Find(IEnumerable<LibraryExercise> exercises, string query)
|
||||
{
|
||||
var search = Normalize(query);
|
||||
var words = search.Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
return exercises
|
||||
.Where(exercise => words.All(word => Normalize(exercise.Name).Contains(word)))
|
||||
.OrderByDescending(exercise => Normalize(exercise.Name) == search)
|
||||
.ThenByDescending(exercise => Normalize(exercise.Name).StartsWith(search))
|
||||
.ThenBy(exercise => exercise.Name, StringComparer.CurrentCultureIgnoreCase)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private static string Normalize(string value) => value.Trim().ToLowerInvariant().Replace('ё', 'е');
|
||||
}
|
||||
Reference in New Issue
Block a user