From 0db1ebb0055acf5e7095ba1e4860ca9d59113da2 Mon Sep 17 00:00:00 2001 From: ppandyz2 Date: Tue, 10 Jan 2023 12:16:53 -0600 Subject: [PATCH 1/2] testing --- .../candidatechallenge/CandidateChallengeApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/zoomcare/candidatechallenge/CandidateChallengeApplication.java b/src/main/java/com/zoomcare/candidatechallenge/CandidateChallengeApplication.java index 0114259..cafd9c2 100644 --- a/src/main/java/com/zoomcare/candidatechallenge/CandidateChallengeApplication.java +++ b/src/main/java/com/zoomcare/candidatechallenge/CandidateChallengeApplication.java @@ -11,5 +11,5 @@ public static void main(String[] args) { SpringApplication.run(CandidateChallengeApplication.class, args); } - +//testing } From d470a14ad19494dad2726cc0ae8be9a6a6a4c65c Mon Sep 17 00:00:00 2001 From: ppandyz2 Date: Tue, 10 Jan 2023 23:17:43 -0600 Subject: [PATCH 2/2] Initial Commit --- pom.xml | 17 +++++++- .../candidatechallenge/BO/EmployeeBO.java | 17 ++++++++ .../candidatechallenge/BO/PropertyBO.java | 11 ++++++ .../CandidateChallengeApplication.java | 2 +- .../controller/EmployeeController.java | 39 +++++++++++++++++++ .../candidatechallenge/entity/Employee.java | 26 +++++++++++++ .../candidatechallenge/entity/Property.java | 23 +++++++++++ .../entity/PropertyKey.java | 17 ++++++++ .../repository/EmployeeRepository.java | 12 ++++++ .../service/EmployeeServices.java | 26 +++++++++++++ .../util/ConfigurationOfMapper.java | 14 +++++++ 11 files changed, 201 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/zoomcare/candidatechallenge/BO/EmployeeBO.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/BO/PropertyBO.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/entity/Employee.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/entity/Property.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/entity/PropertyKey.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/repository/EmployeeRepository.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServices.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/util/ConfigurationOfMapper.java diff --git a/pom.xml b/pom.xml index 17fd7ad..a3215a5 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ org.springframework.boot - spring-boot-starter-data-jdbc + spring-boot-starter-data-jpa org.springframework.boot @@ -49,7 +49,20 @@ spring-boot-starter-test test - + + org.modelmapper + modelmapper-module-jsr310 + 1.2.2 + + + + org.projectlombok + lombok + 1.18.24 + provided + + + diff --git a/src/main/java/com/zoomcare/candidatechallenge/BO/EmployeeBO.java b/src/main/java/com/zoomcare/candidatechallenge/BO/EmployeeBO.java new file mode 100644 index 0000000..4a7b20f --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/BO/EmployeeBO.java @@ -0,0 +1,17 @@ +package com.zoomcare.candidatechallenge.BO; + +import com.zoomcare.candidatechallenge.entity.Property; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; +import java.util.Set; + +@Getter +@Setter +public class EmployeeBO { + private Long id ; + private List properties ; + private Set employeeDirectReportee; + +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/BO/PropertyBO.java b/src/main/java/com/zoomcare/candidatechallenge/BO/PropertyBO.java new file mode 100644 index 0000000..4e9a11f --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/BO/PropertyBO.java @@ -0,0 +1,11 @@ +package com.zoomcare.candidatechallenge.BO; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class PropertyBO { + private String key ; + private String value ; +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/CandidateChallengeApplication.java b/src/main/java/com/zoomcare/candidatechallenge/CandidateChallengeApplication.java index cafd9c2..0114259 100644 --- a/src/main/java/com/zoomcare/candidatechallenge/CandidateChallengeApplication.java +++ b/src/main/java/com/zoomcare/candidatechallenge/CandidateChallengeApplication.java @@ -11,5 +11,5 @@ public static void main(String[] args) { SpringApplication.run(CandidateChallengeApplication.class, args); } -//testing + } diff --git a/src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java b/src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java new file mode 100644 index 0000000..696cb83 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java @@ -0,0 +1,39 @@ +package com.zoomcare.candidatechallenge.controller; + +import com.zoomcare.candidatechallenge.BO.EmployeeBO; +import com.zoomcare.candidatechallenge.entity.Employee; +import com.zoomcare.candidatechallenge.service.EmployeeServices; +import org.modelmapper.ModelMapper; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/api/employees/v1") +public class EmployeeController { + EmployeeServices employeeServices ; + ModelMapper mapper; + public EmployeeController (EmployeeServices employeeServices ,ModelMapper mapper ){ + this.employeeServices = employeeServices; + this.mapper= mapper; + } + + @GetMapping(path = "/{empId}",produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getEmployeeById(@PathVariable(value="empId") Long employeeId) { + Employee employee = employeeServices.getEmployeebyId(employeeId); + EmployeeBO employeeBO= mapper.map(employee, EmployeeBO.class); + return ResponseEntity.ok(employeeBO); + } + @GetMapping(path = "/topLevelEmployees",produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getTopLevelEmployees() { + List topLevelEmployees = employeeServices.getTopLevelEmployee(); + List topLevelEmployeesBO = topLevelEmployees.stream().map(e -> mapper.map(e, EmployeeBO.class)).collect(Collectors.toList()); + return ResponseEntity.ok(topLevelEmployeesBO); + } +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/entity/Employee.java b/src/main/java/com/zoomcare/candidatechallenge/entity/Employee.java new file mode 100644 index 0000000..441c046 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/entity/Employee.java @@ -0,0 +1,26 @@ +package com.zoomcare.candidatechallenge.entity; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; +import java.util.List; +import java.util.Set; + +@Entity +@Table(name="employee") +@Getter +@Setter +public class Employee { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id ; + @ManyToOne + Employee supervisor ; + @OneToMany + @JoinColumn(name="employee_id") + List properties ; + @OneToMany(mappedBy = "supervisor") + Set employeeDirectReportee; + +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/entity/Property.java b/src/main/java/com/zoomcare/candidatechallenge/entity/Property.java new file mode 100644 index 0000000..718d245 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/entity/Property.java @@ -0,0 +1,23 @@ +package com.zoomcare.candidatechallenge.entity; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; + +@Entity +@Table(name="property") +@IdClass(PropertyKey.class) +@Getter +@Setter +public class Property { + @Id + @Column(name ="employee_id") + Long employeeId ; + @Id + @Column(name="key") + String key ; + @Column(name="value") + String value ; + +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/entity/PropertyKey.java b/src/main/java/com/zoomcare/candidatechallenge/entity/PropertyKey.java new file mode 100644 index 0000000..ca61229 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/entity/PropertyKey.java @@ -0,0 +1,17 @@ +package com.zoomcare.candidatechallenge.entity; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Objects; + +@Getter +@Setter +@EqualsAndHashCode +public class PropertyKey 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..8f7f43d --- /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.entity.Employee; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface EmployeeRepository extends JpaRepository { + List findAllBySupervisorIsNull(); +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServices.java b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServices.java new file mode 100644 index 0000000..0dadc81 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServices.java @@ -0,0 +1,26 @@ +package com.zoomcare.candidatechallenge.service; + +import com.zoomcare.candidatechallenge.entity.Employee; +import com.zoomcare.candidatechallenge.repository.EmployeeRepository; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class EmployeeServices { + + EmployeeRepository employeeRepository; + public EmployeeServices(EmployeeRepository employeeRepository) { + this.employeeRepository = employeeRepository; + } + + public Employee getEmployeebyId(Long id) { + Employee dummy = new Employee(); + dummy.setId(189635L); + return employeeRepository.findById(id).orElse(dummy); + } + public List getTopLevelEmployee() { + return employeeRepository.findAllBySupervisorIsNull(); + } + +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/util/ConfigurationOfMapper.java b/src/main/java/com/zoomcare/candidatechallenge/util/ConfigurationOfMapper.java new file mode 100644 index 0000000..bd165d1 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/util/ConfigurationOfMapper.java @@ -0,0 +1,14 @@ +package com.zoomcare.candidatechallenge.util; + +import org.modelmapper.ModelMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ConfigurationOfMapper { + @Bean + public ModelMapper getModelMapper() { + ModelMapper mapper = new ModelMapper(); + return mapper; + } +}