From 13ad0e9477f3664770c71e5104c199c0145e31d2 Mon Sep 17 00:00:00 2001 From: nekorpeche Date: Wed, 1 Dec 2021 20:43:01 +0100 Subject: [PATCH 1/4] =?UTF-8?q?RI-174:=20Modifier=20les=20listing=20des=20?= =?UTF-8?q?offres=20pour=20n'afficher=20que=20les=20offres=20non=20archiv?= =?UTF-8?q?=C3=A9es=20*=20case=20true,=20il=20doit=20afficher=20les=20offr?= =?UTF-8?q?es=20archiv=C3=A9es=20*=20case=20false,=20il=20doit=20archiv?= =?UTF-8?q?=C3=A9es=20les=20offres=20non=20archiv=C3=A9es=20*=20case=20nul?= =?UTF-8?q?l,=20il=20doit=20afficher=20toutes=20les=20offres=20Pour=20l'in?= =?UTF-8?q?stant=20il=20me=20r=C3=A9cup=C3=A8re=20les=20offres=20non=20arc?= =?UTF-8?q?hiv=C3=A9es=20seulement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/JobPostingController.java | 8 +++++--- .../repository/JobPostingRepositoryCustom.java | 2 +- .../repository/impl/JobPostingRepositoryImpl.java | 5 ++++- .../refonteimplicaction/service/JobPostingService.java | 4 ++-- .../controller/JobsPostingControllerTest.java | 6 +++--- .../service/JobPostingServiceTest.java | 8 ++++---- .../src/app/core/services/api-endpoints.service.ts | 5 +++-- .../app/job/components/jobs-list/jobs-list.component.ts | 2 +- frontend-implicaction/src/app/job/services/job.service.ts | 4 ++-- 9 files changed, 25 insertions(+), 19 deletions(-) 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..2713291d 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 @@ -36,11 +36,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 archive ) { 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 = Boolean.parseBoolean(archive); + Page jobPostingDtos = jobPostingService.getAllWithCriteria(pageable, search, contractType, applyCheck, isArchive); 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..c757beab 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,7 +51,7 @@ 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( @@ -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..cfb1cad2 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(), null, 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..3a116247 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: checkApply, + archive: archive }; 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 { From ee68c21cfb0ac84a0848ec3d59d9bef6ff1c3bd9 Mon Sep 17 00:00:00 2001 From: nekorpeche Date: Thu, 2 Dec 2021 19:11:09 +0100 Subject: [PATCH 2/4] =?UTF-8?q?RI-174:=20Modifier=20les=20listing=20des=20?= =?UTF-8?q?offres=20pour=20n'afficher=20que=20les=20offres=20non=20archiv?= =?UTF-8?q?=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/JobPostingController.java | 7 ++++--- .../src/app/core/services/api-endpoints.service.ts | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) 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 2713291d..56e4cd52 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; @@ -37,12 +38,12 @@ public ResponseEntity> getAllByCriteria( @RequestParam(value = "search", defaultValue = "") String search, @RequestParam(value = "contractType", required = false) String contractType, @RequestParam(value = "checkApply", required = false) String checkApplyAsString, - @RequestParam(value = "archive", required = false) String archive + @RequestParam(value = "archiveAsString", required = false) String archiveAsString ) { Pageable pageable = PageRequest.of(page, rows, Sort.by(Sort.Direction.valueOf(sortOrder), sortBy)); final boolean applyCheck = Boolean.parseBoolean(checkApplyAsString); - final boolean isArchive = Boolean.parseBoolean(archive); - Page jobPostingDtos = jobPostingService.getAllWithCriteria(pageable, search, contractType, applyCheck, isArchive); + 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/frontend-implicaction/src/app/core/services/api-endpoints.service.ts b/frontend-implicaction/src/app/core/services/api-endpoints.service.ts index 3a116247..a12f49db 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, archive: Boolean, 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, @@ -215,7 +215,7 @@ export class ApiEndpointsService { sortBy: pageable.sortBy, sortOrder: pageable.sortOrder, checkApply: checkApply, - archive: archive + archive: archive !== null ? `${archive}` : null }; return ApiEndpointsService.createUrlWithQueryParameters( Uris.JOBS.BASE_URI, From ecdf6dd40aff87a1880c2dcf59902359e2311b70 Mon Sep 17 00:00:00 2001 From: nekorpeche Date: Thu, 2 Dec 2021 19:15:34 +0100 Subject: [PATCH 3/4] =?UTF-8?q?RI-174:=20Modifier=20les=20listing=20des=20?= =?UTF-8?q?offres=20pour=20n'afficher=20que=20les=20offres=20non=20archiv?= =?UTF-8?q?=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/core/services/api-endpoints.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a12f49db..0e781fa2 100644 --- a/frontend-implicaction/src/app/core/services/api-endpoints.service.ts +++ b/frontend-implicaction/src/app/core/services/api-endpoints.service.ts @@ -214,7 +214,7 @@ export class ApiEndpointsService { page: pageable.page, sortBy: pageable.sortBy, sortOrder: pageable.sortOrder, - checkApply: checkApply, + checkApply, archive: archive !== null ? `${archive}` : null }; return ApiEndpointsService.createUrlWithQueryParameters( From 6660c7a2e882f4141b0d07859bf4020782dd00a8 Mon Sep 17 00:00:00 2001 From: nekorpeche Date: Thu, 2 Dec 2021 19:35:56 +0100 Subject: [PATCH 4/4] =?UTF-8?q?RI-174:=20Modifier=20les=20listing=20des=20?= =?UTF-8?q?offres=20pour=20n'afficher=20que=20les=20offres=20non=20archiv?= =?UTF-8?q?=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../refonteimplicaction/controller/JobPostingController.java | 2 +- .../controller/JobsPostingControllerTest.java | 2 +- .../refonteimplicaction/service/JobPostingServiceTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 56e4cd52..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 @@ -38,7 +38,7 @@ public ResponseEntity> getAllByCriteria( @RequestParam(value = "search", defaultValue = "") String search, @RequestParam(value = "contractType", required = false) String contractType, @RequestParam(value = "checkApply", required = false) String checkApplyAsString, - @RequestParam(value = "archiveAsString", required = false) String archiveAsString + @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(checkApplyAsString); 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 c757beab..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 @@ -55,7 +55,7 @@ void getJobPostingsListShouldListAllJobs() throws Exception { // 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()); 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 cfb1cad2..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 @@ -55,7 +55,7 @@ void should_get_all_jobs_with_criteria_and_check_apply() { given(jobPostingAdapter.toDto(any())).willReturn(JobPostingDto.builder().build()); // when - final Page actual = JobPostingService.getAllWithCriteria(pageable, "", CDD.name(), null, true); + final Page actual = JobPostingService.getAllWithCriteria(pageable, "", CDD.name(), false, true); // then assertThat(actual.getTotalElements()).isEqualTo(jobPage.getTotalElements());