diff --git a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/controller/JobPostingController.java b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/controller/JobPostingController.java index b6bf217d..9d9c522c 100644 --- a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/controller/JobPostingController.java +++ b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/controller/JobPostingController.java @@ -4,6 +4,7 @@ import com.dynonuggets.refonteimplicaction.exception.ImplicactionException; import com.dynonuggets.refonteimplicaction.service.JobPostingService; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -36,11 +37,13 @@ public ResponseEntity> getAllByCriteria( @RequestParam(value = "sortOrder", defaultValue = "ASC") String sortOrder, @RequestParam(value = "search", defaultValue = "") String search, @RequestParam(value = "contractType", required = false) String contractType, - @RequestParam(value = "checkApply", required = false) String applyCheckAsString + @RequestParam(value = "checkApply", required = false) String checkApplyAsString, + @RequestParam(value = "archive", required = false) String archiveAsString ) { Pageable pageable = PageRequest.of(page, rows, Sort.by(Sort.Direction.valueOf(sortOrder), sortBy)); - final boolean applyCheck = Boolean.parseBoolean(applyCheckAsString); - Page jobPostingDtos = jobPostingService.getAllWithCriteria(pageable, search, contractType, applyCheck); + final boolean applyCheck = Boolean.parseBoolean(checkApplyAsString); + final Boolean isArchive = StringUtils.isNotBlank(archiveAsString) ? Boolean.parseBoolean(archiveAsString) : null; + Page jobPostingDtos = jobPostingService.getAllWithCriteria(pageable, search, contractType, isArchive, applyCheck); return ResponseEntity.ok(jobPostingDtos); } diff --git a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/repository/JobPostingRepositoryCustom.java b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/repository/JobPostingRepositoryCustom.java index cfe30186..7c6a7b18 100644 --- a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/repository/JobPostingRepositoryCustom.java +++ b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/repository/JobPostingRepositoryCustom.java @@ -12,6 +12,6 @@ public interface JobPostingRepositoryCustom { * @param contractType le type de contrat à rechercher (CDD, CDI) * @return la liste de résultats paginée des JobPostings correspondant aux critères */ - Page findAllWithCriteria(final Pageable pageable, final String search, final String contractType); + Page findAllWithCriteria(final Pageable pageable, final String search, final String contractType, final Boolean archive); } diff --git a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/repository/impl/JobPostingRepositoryImpl.java b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/repository/impl/JobPostingRepositoryImpl.java index 1fbc9c34..b6e0e9cf 100644 --- a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/repository/impl/JobPostingRepositoryImpl.java +++ b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/repository/impl/JobPostingRepositoryImpl.java @@ -24,7 +24,7 @@ public class JobPostingRepositoryImpl implements JobPostingRepositoryCustom { private final EntityManager entityManager; @Override - public Page findAllWithCriteria(Pageable pageable, String search, String contractType) { + public Page findAllWithCriteria(Pageable pageable, String search, String contractType, Boolean archive) { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery query = criteriaBuilder.createQuery(JobPosting.class); Root queryRoot = query.from(JobPosting.class); @@ -49,6 +49,9 @@ public Page findAllWithCriteria(Pageable pageable, String search, St predicates.add(criteriaBuilder.equal(queryRoot.get("contractType"), ContractTypeEnum.valueOf(contractType))); } + if (archive != null) { + predicates.add(criteriaBuilder.equal(queryRoot.get("archive"), archive)); + } // combinaison des différents prédicats Predicate finalPredicate = criteriaBuilder.and(predicates.toArray(new Predicate[0])); diff --git a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/service/JobPostingService.java b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/service/JobPostingService.java index 9c061621..9d4e75b0 100644 --- a/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/service/JobPostingService.java +++ b/backend-implicaction/src/main/java/com/dynonuggets/refonteimplicaction/service/JobPostingService.java @@ -49,9 +49,9 @@ public JobPostingDto getJobById(Long jobId) { return jobDto; } - public Page getAllWithCriteria(Pageable pageable, String search, String contractType, boolean applyCheck) { + public Page getAllWithCriteria(Pageable pageable, String search, String contractType, Boolean archive, boolean applyCheck) { // récupération des jobs - final Page jobs = jobPostingRepository.findAllWithCriteria(pageable, search, contractType); + final Page jobs = jobPostingRepository.findAllWithCriteria(pageable, search, contractType, archive); if (applyCheck) { final List jobIds = jobs.stream().map(JobPosting::getId).collect(toList()); final List jobAppliesIds = getAllAppliesWithJobIdsIn(jobIds, authService.getCurrentUser().getId()); diff --git a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/controller/JobsPostingControllerTest.java b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/controller/JobsPostingControllerTest.java index d1d4b85a..99afb790 100644 --- a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/controller/JobsPostingControllerTest.java +++ b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/controller/JobsPostingControllerTest.java @@ -51,11 +51,11 @@ void getJobPostingsListShouldListAllJobs() throws Exception { // given Page jobPostingPageMockResponse = new PageImpl<>(jobPostings); - given(jobPostingService.getAllWithCriteria(any(), anyString(), anyString(), anyBoolean())).willReturn(jobPostingPageMockResponse); + given(jobPostingService.getAllWithCriteria(any(), anyString(), anyString(), anyBoolean(), anyBoolean())).willReturn(jobPostingPageMockResponse); // when ResultActions resultActions = mvc.perform( - get(JOBS_BASE_URI).param("contractType", CDD.name()) + get(JOBS_BASE_URI).param("contractType", CDD.name()).param("archive", "true") ).andDo(print()); @@ -74,7 +74,7 @@ void getJobPostingsListShouldListAllJobs() throws Exception { .andExpect(jsonPath(contentPath + ".salary", is(jobPostings.get(i).getSalary()))); } - verify(jobPostingService, times(1)).getAllWithCriteria(any(), anyString(), anyString(), anyBoolean()); + verify(jobPostingService, times(1)).getAllWithCriteria(any(), anyString(), anyString(), anyBoolean(), anyBoolean()); } @Test @@ -82,7 +82,7 @@ void getAllWithoutJwtShouldBeForbidden() throws Exception { mvc.perform(get(JOBS_BASE_URI)).andDo(print()) .andExpect(status().isForbidden()); - verify(jobPostingService, times(0)).getAllWithCriteria(any(), anyString(), anyString(), anyBoolean()); + verify(jobPostingService, times(0)).getAllWithCriteria(any(), anyString(), anyString(), anyBoolean(), anyBoolean()); } @Test diff --git a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/service/JobPostingServiceTest.java b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/service/JobPostingServiceTest.java index cb3f88df..61436945 100644 --- a/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/service/JobPostingServiceTest.java +++ b/backend-implicaction/src/test/java/com/dynonuggets/refonteimplicaction/service/JobPostingServiceTest.java @@ -49,13 +49,13 @@ void should_get_all_jobs_with_criteria_and_check_apply() { Page jobPage = new PageImpl<>(jobs); Pageable pageable = PageRequest.of(0, 10); User currentUser = User.builder().id(123L).build(); - given(jobPostingRepository.findAllWithCriteria(any(), anyString(), anyString())).willReturn(jobPage); + given(jobPostingRepository.findAllWithCriteria(any(), anyString(), anyString(), anyBoolean())).willReturn(jobPage); given(jobApplicationRepository.findAllByJob_IdInAndUser_Id(anyList(), anyLong())).willReturn(Collections.emptyList()); given(authService.getCurrentUser()).willReturn(currentUser); given(jobPostingAdapter.toDto(any())).willReturn(JobPostingDto.builder().build()); // when - final Page actual = JobPostingService.getAllWithCriteria(pageable, "", CDD.name(), true); + final Page actual = JobPostingService.getAllWithCriteria(pageable, "", CDD.name(), false, true); // then assertThat(actual.getTotalElements()).isEqualTo(jobPage.getTotalElements()); @@ -67,10 +67,10 @@ void should_get_all_jobs_with_criteria_and_check_apply_false() { List jobs = Collections.singletonList(JobPosting.builder().id(123L).contractType(CDD).build()); Page jobPage = new PageImpl<>(jobs); Pageable pageable = PageRequest.of(0, 10); - given(jobPostingRepository.findAllWithCriteria(any(), anyString(), anyString())).willReturn(jobPage); + given(jobPostingRepository.findAllWithCriteria(any(), anyString(), anyString(), anyBoolean())).willReturn(jobPage); // when - final Page actual = JobPostingService.getAllWithCriteria(pageable, "", CDD.name(), false); + final Page actual = JobPostingService.getAllWithCriteria(pageable, "", CDD.name(), false, false); // then assertThat(actual.getTotalElements()).isEqualTo(jobPage.getTotalElements()); diff --git a/frontend-implicaction/src/app/core/services/api-endpoints.service.ts b/frontend-implicaction/src/app/core/services/api-endpoints.service.ts index fd2eb48b..0e781fa2 100644 --- a/frontend-implicaction/src/app/core/services/api-endpoints.service.ts +++ b/frontend-implicaction/src/app/core/services/api-endpoints.service.ts @@ -206,7 +206,7 @@ export class ApiEndpointsService { * Jobs */ - getAllJobEndpoint(pageable: Pageable, criteria: JobCriteriaFilter, checkApply: boolean): string { + getAllJobEndpoint(pageable: Pageable, criteria: JobCriteriaFilter, archive: boolean, checkApply: boolean): string { // on merge les filtres et les attributs de pagination const objectParam = { ...criteria, @@ -214,7 +214,8 @@ export class ApiEndpointsService { page: pageable.page, sortBy: pageable.sortBy, sortOrder: pageable.sortOrder, - checkApply + checkApply, + archive: archive !== null ? `${archive}` : null }; return ApiEndpointsService.createUrlWithQueryParameters( Uris.JOBS.BASE_URI, diff --git a/frontend-implicaction/src/app/job/components/jobs-list/jobs-list.component.ts b/frontend-implicaction/src/app/job/components/jobs-list/jobs-list.component.ts index 89ccde20..66f63341 100644 --- a/frontend-implicaction/src/app/job/components/jobs-list/jobs-list.component.ts +++ b/frontend-implicaction/src/app/job/components/jobs-list/jobs-list.component.ts @@ -70,7 +70,7 @@ export class JobsListComponent extends BaseWithPaginationComponent this.isLoading = false)) .subscribe( data => { diff --git a/frontend-implicaction/src/app/job/services/job.service.ts b/frontend-implicaction/src/app/job/services/job.service.ts index 1c05f770..1175b093 100644 --- a/frontend-implicaction/src/app/job/services/job.service.ts +++ b/frontend-implicaction/src/app/job/services/job.service.ts @@ -17,8 +17,8 @@ export class JobService { ) { } - getAllByCriteria(pageable: Pageable, criteria: JobCriteriaFilter, applyCheck = false): Observable { - return this.http.get(this.apiEndpointsService.getAllJobEndpoint(pageable, criteria, applyCheck)); + getAllByCriteria(pageable: Pageable, criteria: JobCriteriaFilter, archive = null, applyCheck = false): Observable { + return this.http.get(this.apiEndpointsService.getAllJobEndpoint(pageable, criteria, archive, applyCheck)); } getById(jobId: string): Observable {