From 241c2b4051c384624ea1e07600fb681ba2aeaf10 Mon Sep 17 00:00:00 2001 From: Rodrigo Mendoza Date: Fri, 9 Jun 2023 12:28:15 -0600 Subject: [PATCH 1/3] Solution1 --- pom.xml | 12 +++- .../com/zoomcare/candidatechallenge/.DS_Store | Bin 0 -> 6148 bytes .../CandidateChallengeApplication.java | 12 ++-- .../controller/EmployeeController.java | 29 ++++++++ .../candidatechallenge/model/Employee.java | 20 ++++++ .../model/EmployeeResponse.java | 12 ++++ .../candidatechallenge/model/Property.java | 25 +++++++ .../candidatechallenge/model/PropertyId.java | 11 ++++ .../repository/EmployeeRepository.java | 12 ++++ .../repository/PropertyRepository.java | 14 ++++ .../service/EmployeeService.java | 10 +++ .../service/EmployeeServiceImpl.java | 44 +++++++++++++ src/main/resources/application.yml | 7 +- .../controller/EmployeeControllerTest.java | 62 ++++++++++++++++++ .../service/EmployeeServiceImplTest.java | 38 +++++++++++ 15 files changed, 296 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/zoomcare/candidatechallenge/.DS_Store create mode 100644 src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/model/Employee.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/model/EmployeeResponse.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/model/Property.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/model/PropertyId.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/repository/EmployeeRepository.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/repository/PropertyRepository.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java create mode 100644 src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java create mode 100644 src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java diff --git a/pom.xml b/pom.xml index 17fd7ad..8098d29 100644 --- a/pom.xml +++ b/pom.xml @@ -31,24 +31,30 @@ org.springframework.boot spring-boot-starter-web - org.flywaydb flyway-core runtime - com.h2database h2 runtime - org.springframework.boot spring-boot-starter-test test + + org.projectlombok + lombok + 1.18.26 + + + org.springframework.boot + spring-boot-starter-data-jpa + diff --git a/src/main/java/com/zoomcare/candidatechallenge/.DS_Store b/src/main/java/com/zoomcare/candidatechallenge/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e75b544384a493538eb8548abcdabe5487ab5f43 GIT binary patch literal 6148 zcmeHKOKL(v5Ufsw2-&#Ia<1SF1~Dh_0)i0$ zdAwS@eht7DA1`xY24G5e#M#5x{M>zHca986;te$K&p;$bf_qQmA^+ZJ}AO$WJ zxX*(dY*Eaf^?lqruH?D)i5bc;4?U);H e$4^m|b getEmployees() { + return service.getEmployees(); + } +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/Employee.java b/src/main/java/com/zoomcare/candidatechallenge/model/Employee.java new file mode 100644 index 0000000..868fc1f --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/model/Employee.java @@ -0,0 +1,20 @@ +package com.zoomcare.candidatechallenge.model; + +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; + +@Data +@Entity +@Table(name = "employee") +public class Employee implements Serializable { + @Id + @Column + private Long id; + @Column(name = "supervisor_id") + private Long supervisorId; +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/EmployeeResponse.java b/src/main/java/com/zoomcare/candidatechallenge/model/EmployeeResponse.java new file mode 100644 index 0000000..6d474f0 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/model/EmployeeResponse.java @@ -0,0 +1,12 @@ +package com.zoomcare.candidatechallenge.model; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class EmployeeResponse { + private Long id; + private Long supervisorId; + private Iterable propertyList; +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/Property.java b/src/main/java/com/zoomcare/candidatechallenge/model/Property.java new file mode 100644 index 0000000..e3f2424 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/model/Property.java @@ -0,0 +1,25 @@ +package com.zoomcare.candidatechallenge.model; + +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.Table; +import java.io.Serializable; + +@Data +@Entity +@IdClass(PropertyId.class) +@Table(name = "property") +public class Property implements Serializable { + @Id + @Column(name = "employee_id") + private Long employeeId; + @Id + @Column + private String key; + @Column + private String value; +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/PropertyId.java b/src/main/java/com/zoomcare/candidatechallenge/model/PropertyId.java new file mode 100644 index 0000000..d126439 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/model/PropertyId.java @@ -0,0 +1,11 @@ +package com.zoomcare.candidatechallenge.model; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class PropertyId implements Serializable { + private Long employeeId; + private String key; +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/repository/EmployeeRepository.java b/src/main/java/com/zoomcare/candidatechallenge/repository/EmployeeRepository.java new file mode 100644 index 0000000..2cab4a9 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/repository/EmployeeRepository.java @@ -0,0 +1,12 @@ +package com.zoomcare.candidatechallenge.repository; + +import com.zoomcare.candidatechallenge.model.Employee; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import javax.transaction.Transactional; + +@Repository +@Transactional +public interface EmployeeRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/zoomcare/candidatechallenge/repository/PropertyRepository.java b/src/main/java/com/zoomcare/candidatechallenge/repository/PropertyRepository.java new file mode 100644 index 0000000..e3e6210 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/repository/PropertyRepository.java @@ -0,0 +1,14 @@ +package com.zoomcare.candidatechallenge.repository; + +import com.zoomcare.candidatechallenge.model.Property; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import javax.transaction.Transactional; +import java.util.List; + +@Repository +@Transactional +public interface PropertyRepository extends JpaRepository { + List findAllPropertyByEmployeeId(Long employee_id); +} \ No newline at end of file diff --git a/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java new file mode 100644 index 0000000..e0906a1 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java @@ -0,0 +1,10 @@ +package com.zoomcare.candidatechallenge.service; + +import com.zoomcare.candidatechallenge.model.EmployeeResponse; + +import java.util.List; + +public interface EmployeeService { + EmployeeResponse getEmployee(Long id); + List getEmployees(); +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java new file mode 100644 index 0000000..804e14b --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java @@ -0,0 +1,44 @@ +package com.zoomcare.candidatechallenge.service; + +import com.zoomcare.candidatechallenge.model.Employee; +import com.zoomcare.candidatechallenge.model.EmployeeResponse; +import com.zoomcare.candidatechallenge.model.Property; +import com.zoomcare.candidatechallenge.repository.EmployeeRepository; +import com.zoomcare.candidatechallenge.repository.PropertyRepository; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class EmployeeServiceImpl implements EmployeeService { + EmployeeRepository employeeRepository; + PropertyRepository propertyRepository; + + @Override + public EmployeeResponse getEmployee(Long id) { + Optional employeeOptional = employeeRepository.findById(id); + List propertyByEmployeeId = propertyRepository.findAllPropertyByEmployeeId(id); + Employee employee = employeeOptional.isPresent() ? employeeOptional.get() : new Employee(); + return EmployeeResponse.builder() + .id(employee.getId()) + .supervisorId(employee.getSupervisorId()) + .propertyList(propertyByEmployeeId) + .build(); + } + + @Override + public List getEmployees() { + List employeeList = employeeRepository.findAll(); + List propertyList = propertyRepository.findAll(); + return employeeList.stream().map(employee -> EmployeeResponse.builder() + .id(employee.getId()) + .supervisorId(employee.getSupervisorId()) + .propertyList(propertyList.stream().filter(property -> + property.getEmployeeId() == employee.getId()).collect(Collectors.toList())) + .build()).collect(Collectors.toList()); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4408d17..d6bd5c9 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,6 +2,11 @@ spring: h2: console: enabled: true + datasource: + url: jdbc:h2:mem:testdb + username: sa + main: + allow-bean-definition-overriding: true management: endpoints: web: @@ -9,4 +14,4 @@ management: include: "*" endpoint: health: - show-details: always \ No newline at end of file + show-details: always diff --git a/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java b/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java new file mode 100644 index 0000000..608962e --- /dev/null +++ b/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java @@ -0,0 +1,62 @@ +package com.zoomcare.candidatechallenge.controller; + +import com.zoomcare.candidatechallenge.model.EmployeeResponse; +import com.zoomcare.candidatechallenge.model.Property; +import com.zoomcare.candidatechallenge.service.EmployeeService; +import com.zoomcare.candidatechallenge.service.EmployeeServiceImpl; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class EmployeeControllerTest { + + private EmployeeController controller; + EmployeeService service; + + @Before + public void setUp() { + service = Mockito.mock(EmployeeServiceImpl.class); + controller = new EmployeeController(service); + } + + @Test + public void test_getEmployee_success() { + EmployeeResponse employeeResponse = getEmployeeResponse(1L, null,"title", "CEO"); + Mockito.when(service.getEmployee(Mockito.any())).thenReturn(employeeResponse); + EmployeeResponse controllerResponse = controller.getEmployee(1L); + System.out.println(controllerResponse); + assertNotNull(employeeResponse); + assertEquals(employeeResponse, controllerResponse); + } + + @Test + public void test_getEmployee_notFound() { + EmployeeResponse employeeResponse = getEmployeeResponse(0L, null, null, null); + Mockito.when(service.getEmployee(Mockito.any())).thenReturn(employeeResponse); + EmployeeResponse controllerResponse = controller.getEmployee(0L); + System.out.println(controllerResponse); + assertNotNull(employeeResponse); + assertEquals(employeeResponse, controllerResponse); + } + + private static EmployeeResponse getEmployeeResponse(Long id, Long supervisorId, String key, String title) { + Property property = new Property(); + property.setEmployeeId(id); + property.setKey(key); + property.setValue(title); + List propertyByEmployeeId = new ArrayList<>(); + propertyByEmployeeId.add(property); + EmployeeResponse employeeResponse = EmployeeResponse.builder() + .id(id) + .supervisorId(supervisorId) + .propertyList(propertyByEmployeeId) + .build(); + return employeeResponse; + } +} \ No newline at end of file diff --git a/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java b/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java new file mode 100644 index 0000000..1241239 --- /dev/null +++ b/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java @@ -0,0 +1,38 @@ +package com.zoomcare.candidatechallenge.service; + +import com.zoomcare.candidatechallenge.model.Employee; +import com.zoomcare.candidatechallenge.model.EmployeeResponse; +import com.zoomcare.candidatechallenge.model.Property; +import com.zoomcare.candidatechallenge.repository.EmployeeRepository; +import com.zoomcare.candidatechallenge.repository.PropertyRepository; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class EmployeeServiceImplTest { + + private EmployeeServiceImpl service; + EmployeeRepository employeeRepository; + PropertyRepository propertyRepository; + + @Before + public void setUp() { + employeeRepository = Mockito.mock(EmployeeRepository.class); + propertyRepository = Mockito.mock(PropertyRepository.class); + service = new EmployeeServiceImpl(employeeRepository, propertyRepository); + } + + @Test + public void test_getEmployee_success() { + Optional employeeOptional = Optional.of(new Employee()); + List propertyList = new ArrayList<>(); + Mockito.when(employeeRepository.findById(Mockito.any())).thenReturn(employeeOptional); + Mockito.when(propertyRepository.findAllPropertyByEmployeeId(Mockito.any())).thenReturn(propertyList); + EmployeeResponse employee = service.getEmployee(5L); + System.out.println(employee); + } +} \ No newline at end of file From 9164b90e62b4c298a78344b4568923a1df691a49 Mon Sep 17 00:00:00 2001 From: Rodrigo Mendoza Date: Fri, 9 Jun 2023 12:50:44 -0600 Subject: [PATCH 2/3] addingTest --- .../controller/EmployeeControllerTest.java | 12 ++++++++++-- .../service/EmployeeServiceImplTest.java | 14 +++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java b/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java index 608962e..ae42bcd 100644 --- a/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java +++ b/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java @@ -30,17 +30,24 @@ public void test_getEmployee_success() { EmployeeResponse employeeResponse = getEmployeeResponse(1L, null,"title", "CEO"); Mockito.when(service.getEmployee(Mockito.any())).thenReturn(employeeResponse); EmployeeResponse controllerResponse = controller.getEmployee(1L); - System.out.println(controllerResponse); assertNotNull(employeeResponse); assertEquals(employeeResponse, controllerResponse); } + @Test + public void test_getEmployees_success() { + List employeesResponse = new ArrayList<>(); + Mockito.when(service.getEmployees()).thenReturn(employeesResponse); + List controllerResponse = controller.getEmployees(); + assertNotNull(employeesResponse); + assertEquals(employeesResponse, controllerResponse); + } + @Test public void test_getEmployee_notFound() { EmployeeResponse employeeResponse = getEmployeeResponse(0L, null, null, null); Mockito.when(service.getEmployee(Mockito.any())).thenReturn(employeeResponse); EmployeeResponse controllerResponse = controller.getEmployee(0L); - System.out.println(controllerResponse); assertNotNull(employeeResponse); assertEquals(employeeResponse, controllerResponse); } @@ -59,4 +66,5 @@ private static EmployeeResponse getEmployeeResponse(Long id, Long supervisorId, .build(); return employeeResponse; } + } \ No newline at end of file diff --git a/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java b/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java index 1241239..d1a57a0 100644 --- a/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java +++ b/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java @@ -13,6 +13,8 @@ import java.util.List; import java.util.Optional; +import static org.junit.Assert.assertNotNull; + public class EmployeeServiceImplTest { private EmployeeServiceImpl service; @@ -33,6 +35,16 @@ public void test_getEmployee_success() { Mockito.when(employeeRepository.findById(Mockito.any())).thenReturn(employeeOptional); Mockito.when(propertyRepository.findAllPropertyByEmployeeId(Mockito.any())).thenReturn(propertyList); EmployeeResponse employee = service.getEmployee(5L); - System.out.println(employee); + assertNotNull(employee); + } + + @Test + public void test_getEmployees_success() { + Optional employeeOptional = Optional.of(new Employee()); + List propertyList = new ArrayList<>(); + Mockito.when(employeeRepository.findById(Mockito.any())).thenReturn(employeeOptional); + Mockito.when(propertyRepository.findAllPropertyByEmployeeId(Mockito.any())).thenReturn(propertyList); + List employeeResponseList = service.getEmployees(); + assertNotNull(employeeResponseList); } } \ No newline at end of file From d4052b1f93099981ea8bf435a481f6322bbf5bf8 Mon Sep 17 00:00:00 2001 From: Rodrigo Mendoza Date: Fri, 9 Jun 2023 13:06:55 -0600 Subject: [PATCH 3/3] Solution2 with relation annotation --- .../controller/EmployeeController.java | 6 +-- .../candidatechallenge/model/Employee.java | 18 ++++++--- .../model/EmployeeResponse.java | 12 ------ .../candidatechallenge/model/Property.java | 19 +++++---- .../candidatechallenge/model/PropertyId.java | 11 ----- .../repository/PropertyRepository.java | 2 - .../service/EmployeeService.java | 6 +-- .../service/EmployeeServiceImpl.java | 22 ++-------- .../controller/EmployeeControllerTest.java | 40 +++++++++---------- .../service/EmployeeServiceImplTest.java | 11 +---- 10 files changed, 55 insertions(+), 92 deletions(-) delete mode 100644 src/main/java/com/zoomcare/candidatechallenge/model/EmployeeResponse.java delete mode 100644 src/main/java/com/zoomcare/candidatechallenge/model/PropertyId.java diff --git a/src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java b/src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java index 76fe694..d9b1915 100644 --- a/src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java +++ b/src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java @@ -1,6 +1,6 @@ package com.zoomcare.candidatechallenge.controller; -import com.zoomcare.candidatechallenge.model.EmployeeResponse; +import com.zoomcare.candidatechallenge.model.Employee; import com.zoomcare.candidatechallenge.service.EmployeeService; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -18,12 +18,12 @@ public class EmployeeController { private EmployeeService service; @GetMapping("/{id}") - public EmployeeResponse getEmployee(@PathVariable @NotNull Long id) { + public Employee getEmployee(@PathVariable @NotNull Long id) { return service.getEmployee(id); } @GetMapping - public List getEmployees() { + public List getEmployees() { return service.getEmployees(); } } diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/Employee.java b/src/main/java/com/zoomcare/candidatechallenge/model/Employee.java index 868fc1f..429c96d 100644 --- a/src/main/java/com/zoomcare/candidatechallenge/model/Employee.java +++ b/src/main/java/com/zoomcare/candidatechallenge/model/Employee.java @@ -2,19 +2,27 @@ import lombok.Data; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Id; +import javax.persistence.OneToMany; import javax.persistence.Table; -import java.io.Serializable; +import java.util.List; @Data @Entity -@Table(name = "employee") -public class Employee implements Serializable { +@Table(name= "employee") +public class Employee { + @Id @Column private Long id; - @Column(name = "supervisor_id") + @Column(name="supervisor_id") private Long supervisorId; -} + + @OneToMany(mappedBy = "employee", fetch = FetchType.EAGER, cascade = CascadeType.ALL) + private List propertyList; + +} \ No newline at end of file diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/EmployeeResponse.java b/src/main/java/com/zoomcare/candidatechallenge/model/EmployeeResponse.java deleted file mode 100644 index 6d474f0..0000000 --- a/src/main/java/com/zoomcare/candidatechallenge/model/EmployeeResponse.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.zoomcare.candidatechallenge.model; - -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class EmployeeResponse { - private Long id; - private Long supervisorId; - private Iterable propertyList; -} diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/Property.java b/src/main/java/com/zoomcare/candidatechallenge/model/Property.java index e3f2424..23864a2 100644 --- a/src/main/java/com/zoomcare/candidatechallenge/model/Property.java +++ b/src/main/java/com/zoomcare/candidatechallenge/model/Property.java @@ -1,25 +1,28 @@ package com.zoomcare.candidatechallenge.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Id; -import javax.persistence.IdClass; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.Table; -import java.io.Serializable; @Data @Entity -@IdClass(PropertyId.class) -@Table(name = "property") -public class Property implements Serializable { - @Id - @Column(name = "employee_id") - private Long employeeId; +@Table(name= "property") +public class Property { + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "employee_id") + @JsonIgnore + private Employee employee; @Id @Column private String key; @Column private String value; } + diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/PropertyId.java b/src/main/java/com/zoomcare/candidatechallenge/model/PropertyId.java deleted file mode 100644 index d126439..0000000 --- a/src/main/java/com/zoomcare/candidatechallenge/model/PropertyId.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.zoomcare.candidatechallenge.model; - -import lombok.Data; - -import java.io.Serializable; - -@Data -public class PropertyId implements Serializable { - private Long employeeId; - private String key; -} diff --git a/src/main/java/com/zoomcare/candidatechallenge/repository/PropertyRepository.java b/src/main/java/com/zoomcare/candidatechallenge/repository/PropertyRepository.java index e3e6210..cbd640d 100644 --- a/src/main/java/com/zoomcare/candidatechallenge/repository/PropertyRepository.java +++ b/src/main/java/com/zoomcare/candidatechallenge/repository/PropertyRepository.java @@ -5,10 +5,8 @@ import org.springframework.stereotype.Repository; import javax.transaction.Transactional; -import java.util.List; @Repository @Transactional public interface PropertyRepository extends JpaRepository { - List findAllPropertyByEmployeeId(Long employee_id); } \ No newline at end of file diff --git a/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java index e0906a1..133c5cd 100644 --- a/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java +++ b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java @@ -1,10 +1,10 @@ package com.zoomcare.candidatechallenge.service; -import com.zoomcare.candidatechallenge.model.EmployeeResponse; +import com.zoomcare.candidatechallenge.model.Employee; import java.util.List; public interface EmployeeService { - EmployeeResponse getEmployee(Long id); - List getEmployees(); + Employee getEmployee(Long id); + List getEmployees(); } diff --git a/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java index 804e14b..6e95995 100644 --- a/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java +++ b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java @@ -1,8 +1,6 @@ package com.zoomcare.candidatechallenge.service; import com.zoomcare.candidatechallenge.model.Employee; -import com.zoomcare.candidatechallenge.model.EmployeeResponse; -import com.zoomcare.candidatechallenge.model.Property; import com.zoomcare.candidatechallenge.repository.EmployeeRepository; import com.zoomcare.candidatechallenge.repository.PropertyRepository; import lombok.AllArgsConstructor; @@ -10,7 +8,6 @@ import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; @Service @AllArgsConstructor @@ -19,26 +16,15 @@ public class EmployeeServiceImpl implements EmployeeService { PropertyRepository propertyRepository; @Override - public EmployeeResponse getEmployee(Long id) { + public Employee getEmployee(Long id) { Optional employeeOptional = employeeRepository.findById(id); - List propertyByEmployeeId = propertyRepository.findAllPropertyByEmployeeId(id); Employee employee = employeeOptional.isPresent() ? employeeOptional.get() : new Employee(); - return EmployeeResponse.builder() - .id(employee.getId()) - .supervisorId(employee.getSupervisorId()) - .propertyList(propertyByEmployeeId) - .build(); + return employee; } @Override - public List getEmployees() { + public List getEmployees() { List employeeList = employeeRepository.findAll(); - List propertyList = propertyRepository.findAll(); - return employeeList.stream().map(employee -> EmployeeResponse.builder() - .id(employee.getId()) - .supervisorId(employee.getSupervisorId()) - .propertyList(propertyList.stream().filter(property -> - property.getEmployeeId() == employee.getId()).collect(Collectors.toList())) - .build()).collect(Collectors.toList()); + return employeeList; } } diff --git a/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java b/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java index ae42bcd..ca538ff 100644 --- a/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java +++ b/src/test/java/com/zoomcare/candidatechallenge/controller/EmployeeControllerTest.java @@ -1,6 +1,6 @@ package com.zoomcare.candidatechallenge.controller; -import com.zoomcare.candidatechallenge.model.EmployeeResponse; +import com.zoomcare.candidatechallenge.model.Employee; import com.zoomcare.candidatechallenge.model.Property; import com.zoomcare.candidatechallenge.service.EmployeeService; import com.zoomcare.candidatechallenge.service.EmployeeServiceImpl; @@ -27,44 +27,42 @@ public void setUp() { @Test public void test_getEmployee_success() { - EmployeeResponse employeeResponse = getEmployeeResponse(1L, null,"title", "CEO"); - Mockito.when(service.getEmployee(Mockito.any())).thenReturn(employeeResponse); - EmployeeResponse controllerResponse = controller.getEmployee(1L); - assertNotNull(employeeResponse); - assertEquals(employeeResponse, controllerResponse); + Employee employee = getEmployee(1L, null,"title", "CEO"); + Mockito.when(service.getEmployee(Mockito.any())).thenReturn(employee); + Employee controllerResponse = controller.getEmployee(1L); + assertNotNull(employee); + assertEquals(employee, controllerResponse); } @Test public void test_getEmployees_success() { - List employeesResponse = new ArrayList<>(); + List employeesResponse = new ArrayList<>(); Mockito.when(service.getEmployees()).thenReturn(employeesResponse); - List controllerResponse = controller.getEmployees(); + List controllerResponse = controller.getEmployees(); assertNotNull(employeesResponse); assertEquals(employeesResponse, controllerResponse); } @Test public void test_getEmployee_notFound() { - EmployeeResponse employeeResponse = getEmployeeResponse(0L, null, null, null); - Mockito.when(service.getEmployee(Mockito.any())).thenReturn(employeeResponse); - EmployeeResponse controllerResponse = controller.getEmployee(0L); - assertNotNull(employeeResponse); - assertEquals(employeeResponse, controllerResponse); + Employee Employee = getEmployee(0L, null, null, null); + Mockito.when(service.getEmployee(Mockito.any())).thenReturn(Employee); + Employee controllerResponse = controller.getEmployee(0L); + assertNotNull(Employee); + assertEquals(Employee, controllerResponse); } - private static EmployeeResponse getEmployeeResponse(Long id, Long supervisorId, String key, String title) { + private static Employee getEmployee(Long id, Long supervisorId, String key, String title) { + Employee employee = new Employee(); + employee.setId(id); + employee.setSupervisorId(supervisorId); Property property = new Property(); - property.setEmployeeId(id); + property.setEmployee(employee); property.setKey(key); property.setValue(title); List propertyByEmployeeId = new ArrayList<>(); propertyByEmployeeId.add(property); - EmployeeResponse employeeResponse = EmployeeResponse.builder() - .id(id) - .supervisorId(supervisorId) - .propertyList(propertyByEmployeeId) - .build(); - return employeeResponse; + return employee; } } \ No newline at end of file diff --git a/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java b/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java index d1a57a0..5cb21e2 100644 --- a/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java +++ b/src/test/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImplTest.java @@ -1,15 +1,12 @@ package com.zoomcare.candidatechallenge.service; import com.zoomcare.candidatechallenge.model.Employee; -import com.zoomcare.candidatechallenge.model.EmployeeResponse; -import com.zoomcare.candidatechallenge.model.Property; import com.zoomcare.candidatechallenge.repository.EmployeeRepository; import com.zoomcare.candidatechallenge.repository.PropertyRepository; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -31,20 +28,16 @@ public void setUp() { @Test public void test_getEmployee_success() { Optional employeeOptional = Optional.of(new Employee()); - List propertyList = new ArrayList<>(); Mockito.when(employeeRepository.findById(Mockito.any())).thenReturn(employeeOptional); - Mockito.when(propertyRepository.findAllPropertyByEmployeeId(Mockito.any())).thenReturn(propertyList); - EmployeeResponse employee = service.getEmployee(5L); + Employee employee = service.getEmployee(5L); assertNotNull(employee); } @Test public void test_getEmployees_success() { Optional employeeOptional = Optional.of(new Employee()); - List propertyList = new ArrayList<>(); Mockito.when(employeeRepository.findById(Mockito.any())).thenReturn(employeeOptional); - Mockito.when(propertyRepository.findAllPropertyByEmployeeId(Mockito.any())).thenReturn(propertyList); - List employeeResponseList = service.getEmployees(); + List employeeResponseList = service.getEmployees(); assertNotNull(employeeResponseList); } } \ No newline at end of file