Ignore:
Timestamp:
06/09/24 14:24:03 (2 weeks ago)
Author:
223021 <daniel.ilievski.2@…>
Branches:
main
Children:
b248810
Parents:
19398ad
Message:

Implemented job application functionality, added job advertisement filtering and replaced text areas with editors

File:
1 edited

Legend:

Unmodified
Added
Removed
  • jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobAdvertisementServiceImpl.java

    r19398ad r28b3398  
    55import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.enumerations.JobType;
    66import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdDetailsDTO;
     7import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdFilterDTO;
    78import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdvertisementDTO;
    89import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.JobAdvertisement;
     10import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
    911import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.User;
    1012import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.JobAdvertisementRepository;
     13import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
    1114import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.UserRepository;
    1215import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JobAdvertisementService;
     
    1518import java.time.LocalDate;
    1619import java.time.LocalDateTime;
     20import java.util.Comparator;
    1721import java.util.List;
    1822
     
    2226    private final UserRepository userRepository;
    2327    private final JobAdvertisementRepository jobAdvertisementRepository;
     28    private final RecruiterRepository recruiterRepository;
    2429
    2530    @Override
    2631    public JobAdDetailsDTO addJobAdvertisement(JobAdvertisementDTO jobAdvertisementDTO) {
    27         User recruiter = userRepository.findByEmail(jobAdvertisementDTO.getEmail()).orElseThrow(() -> new IllegalArgumentException("User not found"));
     32        Recruiter recruiter = recruiterRepository.findRecruiterByEmail(jobAdvertisementDTO.getEmail()).orElseThrow(() -> new IllegalArgumentException("User not found"));
    2833        JobAdvertisement jobAdvertisement = new JobAdvertisement(
    2934                recruiter,
     
    3540                JobType.valueOf(jobAdvertisementDTO.getJobType()),
    3641                EmploymentStatus.valueOf(jobAdvertisementDTO.getEmploymentStatus())
    37                 );
     42        );
    3843        jobAdvertisementRepository.save(jobAdvertisement);
    3944        return JobAdvertisement.mapToJobAdDetailsDTO(jobAdvertisement);
     
    7984
    8085    @Override
     86    public List<JobAdDetailsDTO> filterJobAdvertisements(JobAdFilterDTO jobAdFilterDTO) {
     87        List<JobAdvertisement> filteredJobAds = jobAdvertisementRepository.findAll();
     88        filteredJobAds = filter(filteredJobAds, jobAdFilterDTO);
     89
     90        return filteredJobAds.stream()
     91                .map(JobAdvertisement::mapToJobAdDetailsDTO)
     92                .toList();
     93    }
     94
     95    private List<JobAdvertisement> filter(List<JobAdvertisement> filteredJobAdvertisements, JobAdFilterDTO jobAdFilterDTO) {
     96        return filteredJobAdvertisements.stream()
     97                .filter(jobAd -> jobAd.getTitle().toLowerCase().contains(jobAdFilterDTO.getSearchTerm().toLowerCase()))
     98                .filter(jobAd -> jobAdFilterDTO.getIndustry().equals("all") || jobAd.getIndustry().equals(jobAdFilterDTO.getIndustry()))
     99                .sorted(getComparator(jobAdFilterDTO.getSortOrder()))
     100                .toList();
     101    }
     102
     103    private Comparator<JobAdvertisement> getComparator(String sortOrder) {
     104        return switch (sortOrder) {
     105            case "date_newest" -> Comparator.comparing(JobAdvertisement::getPostedOn).reversed();
     106            case "date_oldest" -> Comparator.comparing(JobAdvertisement::getPostedOn);
     107            case "salary_highest" -> Comparator.comparing(JobAdvertisement::getStartingSalary).reversed();
     108            case "salary_lowest" -> Comparator.comparing(JobAdvertisement::getStartingSalary);
     109            default -> Comparator.comparing(JobAdvertisement::getPostedOn); // Default sorting order
     110        };
     111    }
     112
     113
     114    @Override
    81115    public List<JobAdDetailsDTO> findAllJobAdvertisementsByRecruiterId(Long recruiterId) {
    82116        List<JobAdvertisement> jobAdvertisementList = jobAdvertisementRepository.findAllByRecruiterId(recruiterId);
    83 //        jobAdvertisementList.forEach(jobAdvertisement -> {
    84 //            if (!jobAdvertisement.isJobAdActive() && jobAdvertisement.isActive()) {
    85 //                jobAdvertisement.setActive(false);
    86 //                jobAdvertisementRepository.save(jobAdvertisement);
    87 //            } else if (jobAdvertisement.isJobAdActive() && !jobAdvertisement.isActive()) {
    88 //                jobAdvertisement.setActive(true);
    89 //                jobAdvertisementRepository.save(jobAdvertisement);
    90 //            }
    91 //        });
    92117
    93118        return jobAdvertisementList.stream()
     
    95120                .toList();
    96121    }
     122
     123    @Override
     124    public List<JobAdDetailsDTO> filterJobAdvertisementsByRecruiterId(Long recruiterId, JobAdFilterDTO jobAdFilterDTO) {
     125        List<JobAdvertisement> filteredJobAds = jobAdvertisementRepository.findAllByRecruiterId(recruiterId);
     126        filteredJobAds = filter(filteredJobAds, jobAdFilterDTO);
     127        return filteredJobAds.stream()
     128                .map(JobAdvertisement::mapToJobAdDetailsDTO)
     129                .toList();
     130    }
     131
    97132    @Override
    98133    public JobAdDetailsDTO findJobAdvertisementById(Long id) {
Note: See TracChangeset for help on using the changeset viewer.