Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

ApplicantExtensions.cs 3.7KB

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