KON-13 KON-542 Suche nach Deletion Date
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java index faf8b5a..2770869 100644 --- a/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java +++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
@@ -20,6 +20,7 @@ import lombok.extern.log4j.Log4j2; import org.eclipse.openk.contactbasedata.model.VwDetailedContact; import org.eclipse.openk.contactbasedata.service.ContactService; +import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -52,15 +53,22 @@ @RequestParam( "moduleName") Optional<String> moduleName, @RequestParam( "withoutAssignedModule") Optional<Boolean> withoutAssignedModule, @RequestParam( "expiringDataInPast" ) Optional<Boolean> expiringDataInPast, + @RequestParam( "deletionLockExceeded") Optional<Boolean> delLockExceeded, + @RequestParam( "showAnonymized" ) Optional<Boolean> showAnonymized, @PageableDefault( sort = {"name"}, size = 20, direction = ASC) Pageable pageable ) { + + SearchContactsFilterParams filter = new SearchContactsFilterParams(); + filter.setContactType(contactType.orElse(null)); + filter.setPersonTypeUuid(personTypeUuid.orElse(null)); + filter.setSearchText(searchText.orElse(null)); + filter.setModuleName(moduleName.orElse(null)); + filter.setWithoutModule(withoutAssignedModule.orElse(Boolean.FALSE)); + filter.setExpiringDataInPast(expiringDataInPast.orElse(Boolean.FALSE)); + filter.setDelLockExceeded(delLockExceeded.orElse(Boolean.FALSE)); + filter.setShowAnonymized(showAnonymized.orElse(Boolean.FALSE)); + return contactService.findDetailedContacts( - contactType.orElse(null), - personTypeUuid.orElse(null), - searchText.orElse( null), - moduleName.orElse(null), - withoutAssignedModule.orElse(Boolean.FALSE), - expiringDataInPast.orElse(Boolean.FALSE), - pageable); + filter, pageable); } }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java b/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java index e679c4f..f0ab807 100644 --- a/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java +++ b/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
@@ -34,17 +34,24 @@ + " and (COALESCE(:moduleName) is null or COALESCE(:moduleName) is not null AND dc.fkContactId in (select distinct amc.tblContact.id from TblAssignmentModulContact amc where amc.modulName=:moduleName))" + " and (COALESCE(:withoutModule) = false or COALESCE(:withoutModule) = true AND dc.fkContactId not in " + " (select distinct amc.tblContact.id from TblAssignmentModulContact amc)) " - + " and (COALESCE(:dateTimeNow) is null or COALESCE(:dateTimeNow) is not null AND dc.fkContactId in " + + " and (COALESCE(:filterExpiringDate) = false or COALESCE(:filterExpiringDate) = true AND dc.fkContactId in " + " (select distinct amc.tblContact.id from TblAssignmentModulContact amc where " + " amc.expiringDate is not null and amc.expiringDate < :dateTimeNow and " + " (amc.deletionLockUntil is null or amc.deletionLockUntil is not null and amc.deletionLockUntil < :dateTimeNow )))" + + " and (COALESCE(:filterDelLockExceeded) = false or COALESCE(:filterDelLockExceeded) = true and dc.fkContactId in " + + " (select distinct amc.tblContact.id from TblAssignmentModulContact amc where " + + " amc.deletionLockUntil is not null and amc.deletionLockUntil < :dateTimeNow ))" + + " and (COALESCE(:showAnonymized) = false or COALESCE(:showAnonymized) = true and dc.anonymized = true)" ) - Page<VwDetailedContact> findByFilter(@Param("contactType")String contactType, + Page<VwDetailedContact> findByFilter(@Param("contactType")String contactType, // NOSONAR _fd 07.02.2020 moving to a param object will not increase the readability here! @Param("personType") UUID personType, @Param("searchText") String searchText, @Param("moduleName") String moduleName, @Param("withoutModule") boolean withoutModule, @Param("dateTimeNow") Date dateTimeNow, + @Param("filterExpiringDate") boolean filterExpiringDate, + @Param("filterDelLockExceeded") boolean filterDelLockExceeded, + @Param("showAnonymized") boolean showAnonymized, Pageable pageable); }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java index bd5ce40..f76429d 100644 --- a/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java +++ b/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java
@@ -29,6 +29,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.Instant; +import java.util.Date; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @@ -73,6 +75,7 @@ TblAssignmentModulContact assignmentToSave = assignmentModulContactMapper.toTblAssignmentModulContact(assignmentDto); assignmentToSave.setUuid(UUID.randomUUID()); assignmentToSave.setTblContact(tblContact); + assignmentToSave.setAssignmentDate(Date.from(Instant.now())); if ( !checkUniqueAssignmentForContactAndModuleForInsert(tblContact.getId(), assignmentDto.getModulName())) { throw new OperationDeniedException(OperationType.INSERT, "assignment.already.existing");
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java index 4dbe779..4092fb5 100644 --- a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java +++ b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
@@ -19,6 +19,7 @@ import org.eclipse.openk.contactbasedata.model.VwDetailedContact; import org.eclipse.openk.contactbasedata.repository.ContactRepository; import org.eclipse.openk.contactbasedata.repository.DetailedContactRepository; +import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -26,7 +27,6 @@ import java.time.Instant; import java.util.Date; -import java.util.UUID; @Log4j2 @Service @@ -38,31 +38,20 @@ @Autowired private ContactMapper contactMapper; - public Page<VwDetailedContact> findDetailedContacts(String contactType, - UUID personTypeUuid, - String searchText, - String moduleName, - boolean withoutModule, - boolean expiringDataInPast, - Pageable pageable) { - - if( contactType == null && - personTypeUuid == null && - searchText == null && - moduleName == null && - !withoutModule && - !expiringDataInPast ) { - return detailedContactRepository.findAll(pageable); - } - else { - return detailedContactRepository.findByFilter( contactType, - personTypeUuid, - searchText != null ? searchText.toUpperCase() : null, - moduleName, - withoutModule, - expiringDataInPast ? Date.from(Instant.now()) : null, + public Page<VwDetailedContact> findDetailedContacts( + SearchContactsFilterParams searchContactsFilterParams, + Pageable pageable) { + return detailedContactRepository.findByFilter( + searchContactsFilterParams.getContactType(), + searchContactsFilterParams.getPersonTypeUuid(), + searchContactsFilterParams.getSearchText() != null ? searchContactsFilterParams.getSearchText().toUpperCase() : null, + searchContactsFilterParams.getModuleName(), + searchContactsFilterParams.isWithoutModule(), + Date.from(Instant.now()), + searchContactsFilterParams.isExpiringDataInPast(), + searchContactsFilterParams.isDelLockExceeded(), + searchContactsFilterParams.isShowAnonymized(), pageable); - } } }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/util/SearchContactsFilterParams.java b/src/main/java/org/eclipse/openk/contactbasedata/service/util/SearchContactsFilterParams.java new file mode 100644 index 0000000..61a11e5 --- /dev/null +++ b/src/main/java/org/eclipse/openk/contactbasedata/service/util/SearchContactsFilterParams.java
@@ -0,0 +1,19 @@ +package org.eclipse.openk.contactbasedata.service.util; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +@Data +@NoArgsConstructor +public class SearchContactsFilterParams { + private String contactType; + private UUID personTypeUuid; + private String searchText; + private String moduleName; + private boolean withoutModule; + private boolean expiringDataInPast; + private boolean delLockExceeded; + private boolean showAnonymized; +}
diff --git a/src/main/resources/db/migration/V0_13__CREATE_CBD_DB.sql b/src/main/resources/db/migration/V0_13__CREATE_CBD_DB.sql index d83d9ec..6406c0c 100644 --- a/src/main/resources/db/migration/V0_13__CREATE_CBD_DB.sql +++ b/src/main/resources/db/migration/V0_13__CREATE_CBD_DB.sql
@@ -112,8 +112,8 @@ INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '8963aa38-d021-4dc9-bd70-d3734ccd20c4', 'I_P', 'internal person 2 (id=6)', null ); INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( 'c862d604-5766-43d6-a7e8-a4bac2bd01e1', 'E_P', 'external person 1 (id=7)', null ); INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( 'fa3d981b-a7d6-4965-a623-cdbc69404153', 'E_P', 'external person 2 (id=8)', null ); -INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( 'ceba21e9-e685-483b-840e-ad167860a696', 'COM', 'anonymous company A (id=9)', null ); -INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '7889c814-9752-4e4e-a9fe-b46f36a38ccd', 'COM', 'anonymous company B (id=10)', null ); +INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( 'ceba21e9-e685-483b-840e-ad167860a696', 'COM', 'anonymous company A (id=9)', true ); +INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '7889c814-9752-4e4e-a9fe-b46f36a38ccd', 'COM', 'anonymous company B (id=10)', true ); INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '618a01a3-f348-44cc-9ddd-c9df946b0212', 'C_P', 'anoymous contact person A1 (id=11)', true ); INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE, ANONYMIZED) VALUES ( '4ed82474-3878-457a-baef-c28b8e486f25', 'C_P', 'anoymous contact persion A2 (id=12)', true ); @@ -543,7 +543,7 @@ GRANT ALL ON TABLE public.tbl_assignment_modul_contact TO cbd_service; INSERT INTO public.tbl_assignment_modul_contact(uuid, fk_contact_id, modul_name, assignment_date, expiring_date, deletion_lock_until, assignment_note) VALUES ( 'dfc2979c-40e3-11ea-b77f-2e728ce88125', 1, 'Betriebstagebuch', '2020-01-19 10:23:54', '2021-01-19 00:00:00', '2021-01-19 00:00:00', 'seit Januar zugeordnet'); -INSERT INTO public.tbl_assignment_modul_contact(uuid, fk_contact_id, modul_name, assignment_date, expiring_date, deletion_lock_until, assignment_note) VALUES ( '4009bce2-40e5-11ea-b77f-2e728ce88125', 1, 'Störinfos', '2020-02-27 10:23:54', '2021-02-27 00:00:00', '2021-02-27 00:00:00', 'seit Februar zugeordnet'); +INSERT INTO public.tbl_assignment_modul_contact(uuid, fk_contact_id, modul_name, assignment_date, expiring_date, deletion_lock_until, assignment_note) VALUES ( '4009bce2-40e5-11ea-b77f-2e728ce88125', 1, 'Störinfos', '2020-02-27 10:23:54', '2019-02-27 00:00:00', '2019-02-27 00:00:00', 'seit Februar zugeordnet'); -- ------------------------------------- -- VIEWS -------------------------------
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java b/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java index 841fe76..86db98c 100644 --- a/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java +++ b/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
@@ -17,6 +17,7 @@ import org.eclipse.openk.contactbasedata.ContactBaseDataApplication; import org.eclipse.openk.contactbasedata.model.VwDetailedContact; import org.eclipse.openk.contactbasedata.service.ContactService; +import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams; import org.eclipse.openk.contactbasedata.support.MockDataHelper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +31,7 @@ import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.is; -import static org.mockito.ArgumentMatchers.*; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -53,8 +54,7 @@ public void shouldReturnAllContacts() throws Exception { Page<VwDetailedContact> retPage = MockDataHelper.mockVDetailedContactPage(); - when(contactService.findDetailedContacts( - isNull(), isNull(), isNull(), isNull(), anyBoolean(), anyBoolean(), any(Pageable.class))).thenReturn(retPage); + when(contactService.findDetailedContacts(any(SearchContactsFilterParams.class), any(Pageable.class))).thenReturn(retPage); mockMvc.perform(get("/contacts")) .andExpect(status().is2xxSuccessful())
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java b/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java index f3ed1c4..d968cb4 100644 --- a/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java +++ b/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
@@ -17,6 +17,7 @@ import org.eclipse.openk.contactbasedata.config.TestConfiguration; import org.eclipse.openk.contactbasedata.model.VwDetailedContact; import org.eclipse.openk.contactbasedata.repository.DetailedContactRepository; +import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams; import org.eclipse.openk.contactbasedata.support.MockDataHelper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -48,8 +49,9 @@ public void shouldFindDetailedContactsProperly() { Page<VwDetailedContact> mockPaged = MockDataHelper.mockVDetailedContactPage(); when(detailedContactRepository.findAll(any(Pageable.class))).thenReturn(mockPaged); + SearchContactsFilterParams filter = new SearchContactsFilterParams(); Page<VwDetailedContact> retPage = contactService.findDetailedContacts( - null, null, null, null, false, false, PageRequest.of(0, 20)); + filter, PageRequest.of(0, 20)); assertEquals(mockPaged.getTotalElements(), retPage.getTotalElements()); }