KON-14 Contact-Suche um DSGVO erweitert
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 0b0ce65..445ced3 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
@@ -20,7 +20,6 @@
import lombok.extern.log4j.Log4j2;
import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
import org.eclipse.openk.contactbasedata.service.ContactService;
-import org.eclipse.openk.contactbasedata.viewmodel.ContactDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -50,11 +49,16 @@
@RequestParam( "contactType") Optional<String> contactType,
@RequestParam( "personTypeId" ) Optional<UUID> personTypeUuid,
@RequestParam( "searchText" ) Optional<String> searchText,
+ @RequestParam( "moduleName") Optional<String> moduleName,
+ @RequestParam( "withoutAssignedModule") Optional<Boolean> withoutAssignedModule,
@PageableDefault( sort = {"name"}, size = 20, direction = ASC) Pageable pageable ) {
return contactService.findDetailedContacts(
contactType.orElse(null),
personTypeUuid.orElse(null),
- searchText.orElse( null), pageable);
+ searchText.orElse( null),
+ moduleName.orElse(null),
+ withoutAssignedModule.orElse(Boolean.FALSE),
+ 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 3f14e89..bff9760 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
@@ -14,7 +14,6 @@
*/
package org.eclipse.openk.contactbasedata.repository;
-import org.eclipse.openk.contactbasedata.model.TblAddress;
import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -22,24 +21,31 @@
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
-import java.util.List;
import java.util.UUID;
public interface DetailedContactRepository extends PagingAndSortingRepository<VwDetailedContact, Long> {
Page<VwDetailedContact> findAll(Pageable pageable);
- @Query( "select dc from VwDetailedContact dc where"
- + "(COALESCE(:contactType) is null or COALESCE(:contactType) is not null AND dc.contactType=:contactType)"
+ @Query( "select dc from VwDetailedContact dc "
+ + "left outer join TblAssignmentModulContact ass on"
+ + " ass.tblContact.id = dc.fkContactId"
+ + " where (COALESCE(:contactType) is null or COALESCE(:contactType) is not null AND dc.contactType=:contactType)"
+ " and (COALESCE(:personType) is null or COALESCE(:personType) is not null AND dc.personTypeUuid=:personType)"
- + " and (COALESCE(:searchText) is null or COALESCE(:searchText) is not null AND dc.searchfield like %:searchText%)")
+ + " and (COALESCE(:searchText) is null or COALESCE(:searchText) is not null AND dc.searchfield like %:searchText%)"
+ + " and (COALESCE(:moduleName) is null or COALESCE(:moduleName) is not null AND ass.modulName = :moduleName)"
+ + " and (COALESCE(:withoutModule) = false or COALESCE(:withoutModule) = true AND ass is null)"
+ )
Page<VwDetailedContact> findByFilter(@Param("contactType")String contactType,
@Param("personType") UUID personType,
@Param("searchText") String searchText,
+ @Param("moduleName") String moduleName,
+ @Param("withoutModule") boolean withoutModule,
Pageable pageable);
- @Query( "select dc from VwDetailedContact AS dc, TblContact AS c "
+ @Query( "select dc from VwDetailedContact AS dc"
+ + ", TblContact AS c "
+ "inner join c.assignments a where "
+ "dc.fkContactId = c.id and"
+ "(COALESCE(:modulName) is null or COALESCE(:modulName) is not null AND a.modulName =:modulName) and"
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 3814d87..56f6be3 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
@@ -16,19 +16,15 @@
import lombok.extern.log4j.Log4j2;
import org.eclipse.openk.contactbasedata.mapper.ContactMapper;
-import org.eclipse.openk.contactbasedata.model.TblAssignmentModulContact;
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.viewmodel.ContactDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
-import java.util.List;
import java.util.UUID;
-import java.util.stream.Collectors;
@Log4j2
@Service
@@ -42,15 +38,24 @@
public Page<VwDetailedContact> findDetailedContacts(String contactType,
UUID personTypeUuid,
- String searchText, Pageable pageable) {
+ String searchText,
+ String moduleName,
+ boolean withoutModule,
+ Pageable pageable) {
- if( contactType == null && personTypeUuid == null && searchText == null) {
+ if( contactType == null &&
+ personTypeUuid == null &&
+ searchText == null &&
+ moduleName == null &&
+ !withoutModule) {
return detailedContactRepository.findAll(pageable);
}
else {
return detailedContactRepository.findByFilter( contactType,
personTypeUuid,
searchText != null ? searchText.toUpperCase() : null,
+ moduleName,
+ withoutModule,
pageable);
}
}
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 1b79c1d..c27791b 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
@@ -30,8 +30,7 @@
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.is;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.ArgumentMatchers.*;
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.*;
@@ -55,7 +54,7 @@
Page<VwDetailedContact> retPage = MockDataHelper.mockVDetailedContactPage();
when(contactService.findDetailedContacts(
- isNull(), isNull(), isNull(), any(Pageable.class))).thenReturn(retPage);
+ isNull(), isNull(), isNull(), isNull(), anyBoolean(), 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 91788ba..544867a 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
@@ -49,7 +49,7 @@
Page<VwDetailedContact> mockPaged = MockDataHelper.mockVDetailedContactPage();
when(detailedContactRepository.findAll(any(Pageable.class))).thenReturn(mockPaged);
Page<VwDetailedContact> retPage = contactService.findDetailedContacts(
- null, null, null, PageRequest.of(0, 20));
+ null, null, null, null, false, PageRequest.of(0, 20));
assertEquals(mockPaged.getTotalElements(), retPage.getTotalElements());
}