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());
}