KON-39 Interne Personen uid und userRef unique
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/InternalPersonController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/InternalPersonController.java
index 0c93a17..adf51c8 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/InternalPersonController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/InternalPersonController.java
@@ -34,6 +34,7 @@
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import java.net.URI;
+import java.util.Optional;
import java.util.UUID;
@Log4j2
@@ -55,13 +56,18 @@
@GetMapping
@Secured({"ROLE_KON-READER", "ROLE_KON-WRITER", "ROLE_KON-ADMIN"})
- @ApiOperation(value = "Anzeigen aller internen Personen", notes = "Sortieren ist möglich. Interne Personen werden seitenweise geliefert.")
+ @ApiOperation(value = "Anzeigen von internen Personen", notes = "Filtern und Sortieren ist möglich. Interne Personen werden seitenweise geliefert. Werden mehrere Filter gleichzeit verwendet, so werden diese mit 'UND' verknüpft!")
@ResponseStatus(HttpStatus.OK)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
public Page<InternalPersonDto> readInternalPersons(
+ @RequestParam( "uid") Optional<String> uid,
+ @RequestParam( "userRef" ) Optional<String> userRef,
@PageableDefault(sort = {"lastName"}, direction = Sort.Direction.ASC) Pageable pageable){
- return internalPersonService.findInternalPersons(pageable);
+ return internalPersonService.findInternalPersons(
+ uid.orElse(null ),
+ userRef.orElse(null ),
+ pageable);
}
@PostMapping
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java b/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
index b5c53b7..29c780d 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
@@ -15,8 +15,12 @@
package org.eclipse.openk.contactbasedata.repository;
import org.eclipse.openk.contactbasedata.model.TblInternalPerson;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
import java.util.Optional;
import java.util.UUID;
@@ -24,4 +28,11 @@
@Query("select ip from TblInternalPerson ip where ip.contact.uuid = ?1")
Optional< TblInternalPerson > findByTblContactUuid(final UUID contactUuid);
+ @Query( "select ip from TblInternalPerson ip where "+
+ "(COALESCE(:uid) is null or COALESCE(:uid) is not null AND ip.uid=:uid) AND " +
+ "(COALESCE(:userRef) is null or COALESCE(:userRef) is not null AND ip.userRef=:userRef)")
+ Page<TblInternalPerson> findByFilter(@Param( "uid") String uid,
+ @Param( "userRef") String userRef,
+ Pageable pageable);
+
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
index 3adad52..6963a09 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
@@ -19,9 +19,12 @@
import org.eclipse.openk.contactbasedata.exceptions.NotFoundException;
import org.eclipse.openk.contactbasedata.mapper.ContactMapper;
import org.eclipse.openk.contactbasedata.mapper.InternalPersonMapper;
-import org.eclipse.openk.contactbasedata.model.*;
-import org.eclipse.openk.contactbasedata.repository.*;
-import org.eclipse.openk.contactbasedata.viewmodel.ExternalPersonDto;
+import org.eclipse.openk.contactbasedata.model.TblContact;
+import org.eclipse.openk.contactbasedata.model.TblInternalPerson;
+import org.eclipse.openk.contactbasedata.repository.ContactRepository;
+import org.eclipse.openk.contactbasedata.repository.InternalPersonRepository;
+import org.eclipse.openk.contactbasedata.repository.PersonTypeRepository;
+import org.eclipse.openk.contactbasedata.repository.SalutationRepository;
import org.eclipse.openk.contactbasedata.viewmodel.InternalPersonDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
@@ -61,11 +64,17 @@
);
}
- public Page<InternalPersonDto> findInternalPersons(Pageable pageable) {
- return internalPersonRepository.findAll(pageable).map(internalPersonMapper::toInternalPersonDto);
+ public Page<InternalPersonDto> findInternalPersons(String uid, String userRef, Pageable pageable) {
+ Page<TblInternalPerson> returnPageDb;
+ if( uid == null && userRef == null) {
+ returnPageDb = internalPersonRepository.findAll( pageable );
+ }
+ else {
+ returnPageDb = internalPersonRepository.findByFilter( uid, userRef, pageable );
+ }
+ return returnPageDb.map(internalPersonMapper::toInternalPersonDto);
}
-
@Transactional
public InternalPersonDto insertInternalPerson(InternalPersonDto internalPersonDto) {
TblContact contactToSave = new TblContact();
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/controller/InternalPersonControllerTest.java b/src/test/java/org/eclipse/openk/contactbasedata/controller/InternalPersonControllerTest.java
index 3d18ac5..f899812 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/controller/InternalPersonControllerTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/controller/InternalPersonControllerTest.java
@@ -16,12 +16,9 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import org.eclipse.openk.contactbasedata.ContactBaseDataApplication;
-import org.eclipse.openk.contactbasedata.service.ExternalPersonService;
import org.eclipse.openk.contactbasedata.service.InternalPersonService;
import org.eclipse.openk.contactbasedata.support.MockDataHelper;
-import org.eclipse.openk.contactbasedata.viewmodel.ExternalPersonDto;
import org.eclipse.openk.contactbasedata.viewmodel.InternalPersonDto;
-import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@@ -38,6 +35,7 @@
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@@ -72,9 +70,9 @@
public void shouldReturnAllIntPersons() throws Exception {
Page<InternalPersonDto> ipPage = MockDataHelper.mockInternalPersonDtoPage();
- when(internalPersonService.findInternalPersons(any(Pageable.class))).thenReturn(ipPage);
+ when(internalPersonService.findInternalPersons(anyString(), anyString(), any(Pageable.class))).thenReturn(ipPage);
- mockMvc.perform(get("/internal-persons"))
+ mockMvc.perform(get("/internal-persons?uid=ABC&userRef=123"))
.andExpect(status().is2xxSuccessful())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("totalElements", is( 2 )));
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/service/InternalPersonServiceTest.java b/src/test/java/org/eclipse/openk/contactbasedata/service/InternalPersonServiceTest.java
index 4cc33f3..0c94c90 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/service/InternalPersonServiceTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/service/InternalPersonServiceTest.java
@@ -32,6 +32,8 @@
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import org.springframework.test.context.ContextConfiguration;
import java.util.Optional;
@@ -39,7 +41,8 @@
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.*;
@DataJpaTest
@ContextConfiguration(classes = {TestConfiguration.class})
@@ -71,6 +74,23 @@
}
@Test
+ public void shouldFindAllInternalPersons() {
+ Page<TblInternalPerson> ipPage = MockDataHelper.mockTblInternalPersonPage();
+ when(internalPersonRepository.findAll(any(Pageable.class))).thenReturn(ipPage);
+ when(internalPersonRepository.findByFilter(anyString(), anyString(), any(Pageable.class))).thenReturn(ipPage);
+
+ Page<InternalPersonDto> dtoPage = internalPersonService.findInternalPersons(null, null, Pageable.unpaged());
+ Page<InternalPersonDto> dtoPage2= internalPersonService.findInternalPersons("abc", "123", Pageable.unpaged());
+
+ verify( internalPersonRepository, times(1)).findAll(any(Pageable.class));
+ verify( internalPersonRepository, times( 1 )).findByFilter(anyString(), anyString(), any(Pageable.class));
+
+ assertEquals( ipPage.getTotalElements(), dtoPage.getTotalElements());
+ assertEquals( ipPage.getTotalElements(), dtoPage2.getTotalElements());
+
+ }
+
+ @Test
public void shouldThrowInErrorCaseWithInternalPerson() {
TblInternalPerson ip = MockDataHelper.mockInternalPerson();
when(internalPersonRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.empty());
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/support/MockDataHelper.java b/src/test/java/org/eclipse/openk/contactbasedata/support/MockDataHelper.java
index 5850ad6..b9edd3f 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/support/MockDataHelper.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/support/MockDataHelper.java
@@ -422,6 +422,25 @@
return new PageImpl<>(list, Pageable.unpaged(), list.size());
}
+ public static Page<TblInternalPerson> mockTblInternalPersonPage(){
+
+ TblInternalPerson ip1 = mockInternalPerson();
+
+ TblInternalPerson ip2 = new TblInternalPerson();
+ ip2.setContact(new TblContact());
+ ip2.getContact().setUuid(UUID.randomUUID());
+ ip2.setFirstName("Fritz");
+ ip2.setLastName("Alter");
+ ip2.setTitle("Dr.");
+ ip2.setDepartment("Geschäftsführung");
+ ip2.setUid("333-999");
+ ip2.setUserRef("FALTER");
+ ip2.getContact().setNote("Gründer");
+
+ List<TblInternalPerson> list = Arrays.asList(ip1, ip2);
+ return new PageImpl<>(list, Pageable.unpaged(), list.size());
+ }
+
public static TblCompany mockCompany() {
TblContact c = new TblContact();
c.setId( 10L );