選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

ApplicantExtensions.cs 3.7KB

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