using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Diligent.WebAPI.Business.Extensions { [ExcludeFromCodeCoverage] public static class AdExtensions { public static List Filter(this List query, AdFilterDto filters) => query.FilterByExperience(filters.MinExperience, filters.MaxExperience).FilterByWorkType(filters.WorkHour).FilterByEmploymentType(filters.EmploymentType).ToList().FilterByTechnologies(filters.Technologies); public static List FilterByExperience(this List query, int minExperience, int maxExperience) => minExperience >= maxExperience ? query.Where(x => x.MinimumExperience >= minExperience && x.MinimumExperience <= maxExperience).ToList() : query.Where(x => x.MinimumExperience >= minExperience && x.MinimumExperience <= maxExperience).ToList(); public static List FilterByWorkType(this List query, string workHour) => workHour.ToLower() == "parttime" ? query.Where(x => x.WorkHour == WorkHours.PartTime).ToList() : query.Where(x => x.WorkHour == WorkHours.FullTime).ToList(); public static List FilterByEmploymentType(this List query, string employmentType) => employmentType.ToLower() == "intership" ? query.Where(x => x.EmploymentType == EmploymentTypes.Intership).ToList() : query.Where(x => x.EmploymentType == EmploymentTypes.Work).ToList(); public static List FilterByTechnologies(this List query, string[] technologies) { if (technologies == null || technologies.Length == 0) { return query; } List filteredAds = new List(); for (int i = 0; i < query.Count(); i++) { for (int j = 0; j < query[i].Technologies.Count(); j++) { var s = 0; for (int k = 0; k < technologies.Length; k++) { if (query[i].Technologies[j].Name.ToLower() == technologies[k].ToLower()) { s = 1; } } if (s == 1) { filteredAds.Add(query[i]); break; } } } return filteredAds; } } }