You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ApplicantExtensions.cs 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using static Diligent.WebAPI.Data.Entities.Applicant;
  2. namespace Diligent.WebAPI.Business.Extensions
  3. {
  4. [ExcludeFromCodeCoverage]
  5. public static class ApplicantExtensions
  6. {
  7. public static List<Applicant> FilterApplicants(this List<Applicant> query,ApplicantFilterDto applicantFilterDto)
  8. {
  9. return query.FilterByExperience(applicantFilterDto.MinExperience, applicantFilterDto.MaxExperience)
  10. .FilterByEmploymentType(applicantFilterDto.EmploymentType)
  11. .FilterByDateOfApplication(applicantFilterDto.MinDateOfApplication, applicantFilterDto.MaxDateOfApplication)
  12. .FilterByTechnologies(applicantFilterDto.Technologies).ToList();
  13. }
  14. public static List<Ad> FilterAdApplicants(this List<Ad> query, ApplicantFilterDto applicantFilterDto)
  15. {
  16. List<Ad> filteredAds = new();
  17. List<List<Applicant>> applicants = new();
  18. for (int i = 0; i < query.Count; i++)
  19. {
  20. var app = query[i].Applicants.FilterApplicants(applicantFilterDto);
  21. applicants.Add(app);
  22. var k = query[i];
  23. k.Applicants = applicants[i];
  24. filteredAds.Add(k);
  25. }
  26. return filteredAds;
  27. }
  28. private static List<Applicant> FilterByExperience(this List<Applicant> query, int minExperience, int maxExperience)
  29. {
  30. if ((minExperience == 0 && maxExperience == 0) || minExperience > maxExperience) return query;
  31. return query.Where(x => x.Experience >= minExperience && x.Experience <= maxExperience).ToList();
  32. }
  33. private static List<Applicant> FilterByEmploymentType(this List<Applicant> query, string? employmentType)
  34. {
  35. if (employmentType == null) return query;
  36. return query.Where(x => x.TypeOfEmployment == Enum.Parse<TypesOfEmployment>(employmentType)).ToList();
  37. }
  38. private static List<Applicant> FilterByDateOfApplication(this List<Applicant> query, DateTime? minDateOfApplication, DateTime? maxDateOfApplication)
  39. {
  40. if (minDateOfApplication == null) return query;
  41. if (minDateOfApplication > maxDateOfApplication) return query;
  42. if (maxDateOfApplication == null) return query.Where(x => x.DateOfApplication >= minDateOfApplication && x.DateOfApplication <= DateTime.Now).ToList();
  43. return query.Where(x => x.DateOfApplication >= minDateOfApplication && x.DateOfApplication < maxDateOfApplication).ToList();
  44. }
  45. private static List<Applicant> FilterByTechnologies(this List<Applicant> query, string[]? technologies)
  46. {
  47. if (technologies is null)
  48. {
  49. return query;
  50. }
  51. List<Applicant> filteredApplicants = new();
  52. for (int i = 0; i < query.Count; i++)
  53. {
  54. for (int j = 0; j < query[i].TechnologyApplicants.Count; j++)
  55. {
  56. bool s = false;
  57. for (int n = 0; n < technologies.Length; n++)
  58. {
  59. if (query[i].TechnologyApplicants[j].Technology.Name.ToLower() == technologies[n].ToLower())
  60. {
  61. s = true;
  62. break;
  63. }
  64. }
  65. if (s)
  66. {
  67. filteredApplicants.Add(query[i]);
  68. break;
  69. }
  70. }
  71. }
  72. return filteredApplicants;
  73. }
  74. }
  75. }