From b36fef2dd4390508be9871aacf9d6d4d5b95e2d0 Mon Sep 17 00:00:00 2001 From: anusha-act Date: Thu, 1 Dec 2022 22:48:59 -0800 Subject: [PATCH] Final Implementation --- .../controller/EmployeeController.java | 33 ++++++++++++ .../candidatechallenge/dao/EmployeeDao.java | 52 +++++++++++++++++++ .../candidatechallenge/dao/PropertiesDao.java | 27 ++++++++++ .../candidatechallenge/dto/EmployeeDto.java | 42 +++++++++++++++ .../service/EmployeeService.java | 11 ++++ .../service/EmployeeServiceImpl.java | 28 ++++++++++ 6 files changed, 193 insertions(+) create mode 100644 src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/dao/EmployeeDao.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/dao/PropertiesDao.java create mode 100644 src/main/java/com/zoomcare/candidatechallenge/dto/EmployeeDto.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 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..e596c55 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/controller/EmployeeController.java @@ -0,0 +1,33 @@ +package com.zoomcare.candidatechallenge.controller; + +import com.zoomcare.candidatechallenge.dto.EmployeeDto; +import com.zoomcare.candidatechallenge.service.EmployeeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +public class EmployeeController +{ + @Autowired + private EmployeeService employeeService; + +//get specific employee details based on id + @GetMapping(value="/api/employee/id/{id}") + @ResponseStatus(HttpStatus.OK) + EmployeeDto getEmployee(@PathVariable(name="id") Long id){ +return employeeService.getEmployee(id); + } + +//get list of top level employees + @GetMapping(value="/api/employee/topLevel") + @ResponseStatus(HttpStatus.OK) + List getTopLevelEmployeeList(){ + return employeeService.getTopLevelEmployeeList(); + } +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/dao/EmployeeDao.java b/src/main/java/com/zoomcare/candidatechallenge/dao/EmployeeDao.java new file mode 100644 index 0000000..1e0304f --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/dao/EmployeeDao.java @@ -0,0 +1,52 @@ +package com.zoomcare.candidatechallenge.dao; + +import com.zoomcare.candidatechallenge.dto.EmployeeDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +//Data Access Object class for Employee table +@Repository("Employee") +public class EmployeeDao{ + @Autowired + private JdbcTemplate jdbcTemplate; + +private PropertiesDao propertiesDao; + + public EmployeeDao(PropertiesDao propertiesDao, JdbcTemplate jdbcTemplate) { + this.propertiesDao = propertiesDao; + this.jdbcTemplate = jdbcTemplate; + } + private static final String TOP_LEVEL_QUERY = "Select * from employee where supervisor_id is null"; + + public List getTopLevelEmployees() { + List employees = jdbcTemplate.query(TOP_LEVEL_QUERY , ROW_MAPPER_EMP); + for(EmployeeDto emp:employees) { + emp.setEmployeeProperties(propertiesDao.getEmployeeProperties(emp.getEmployeeId())); + } + for(EmployeeDto emp:employees) { + emp.setDirectReports(getDirectReports(emp.getEmployeeId())); + } + return employees; + } + + public EmployeeDto getEmployeeById(Long employeeId) { + EmployeeDto emp = new EmployeeDto(employeeId); + emp.setEmployeeId(employeeId); + emp.setEmployeeProperties(propertiesDao.getEmployeeProperties(employeeId)); + emp.setDirectReports(getDirectReports(employeeId)); + return emp; + } + + public List getDirectReports(Long id){ + String DIRECT_REPORTS_QUERY = "Select * from employee where supervisor_id = "+id; + return jdbcTemplate.query(DIRECT_REPORTS_QUERY, ROW_MAPPER_EMP); + } + + private static final RowMapper ROW_MAPPER_EMP = + (rs, rowNum) -> new EmployeeDto(rs.getLong("id")); + +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/dao/PropertiesDao.java b/src/main/java/com/zoomcare/candidatechallenge/dao/PropertiesDao.java new file mode 100644 index 0000000..18089a4 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/dao/PropertiesDao.java @@ -0,0 +1,27 @@ +package com.zoomcare.candidatechallenge.dao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.stereotype.Repository; + +import java.util.Arrays; +import java.util.List; + +//Data Access Object class for Employee table +@Repository("Properties") +public class PropertiesDao { + + @Autowired + private JdbcTemplate jdbcTemplate; + + + public List> getEmployeeProperties(Long id){ + String PROPERTIES_QUERY = "Select * from property where employee_id="+id; + return jdbcTemplate.query(PROPERTIES_QUERY ,ROW_MAPPER_PROP); + } + + private static final RowMapper> ROW_MAPPER_PROP = + (rs, rowNum) -> + Arrays.asList(rs.getString("key"), rs.getString("value")); +} diff --git a/src/main/java/com/zoomcare/candidatechallenge/dto/EmployeeDto.java b/src/main/java/com/zoomcare/candidatechallenge/dto/EmployeeDto.java new file mode 100644 index 0000000..e74c170 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/dto/EmployeeDto.java @@ -0,0 +1,42 @@ +package com.zoomcare.candidatechallenge.dto; + +import java.util.List; + +public class EmployeeDto { + private Long employeeId; + + private List> employeeProperties; + private List directReports; + + public EmployeeDto(Long employeeId) { + this.employeeId = employeeId; + } + + public Long getEmployeeId() { + return employeeId; + } + public void setEmployeeId(Long employeeId) { + this.employeeId = employeeId; + } + public List> getEmployeeProperties() { + return employeeProperties; + } + public void setEmployeeProperties(List> employeeProperties) { + this.employeeProperties = employeeProperties; + } + public List getDirectReports() { + return directReports; + } + public void setDirectReports(List directReports) { + this.directReports = directReports; + } + + @Override + public String toString() { + return "EmployeeDto{" + + "employeeId=" + employeeId + + ", employeeProperties=" + employeeProperties + + ", directReports=" + directReports + + '}'; + } +} 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..cfa766b --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java @@ -0,0 +1,11 @@ +package com.zoomcare.candidatechallenge.service; + +import com.zoomcare.candidatechallenge.dto.EmployeeDto; + +import java.util.List; + +public interface EmployeeService { + + EmployeeDto getEmployee(Long id); + List getTopLevelEmployeeList(); +} 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..6d729b3 --- /dev/null +++ b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeServiceImpl.java @@ -0,0 +1,28 @@ +package com.zoomcare.candidatechallenge.service; + +import com.zoomcare.candidatechallenge.dao.EmployeeDao; +import com.zoomcare.candidatechallenge.dto.EmployeeDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class EmployeeServiceImpl implements EmployeeService{ + + @Autowired + private final EmployeeDao employeeDao; + + public EmployeeServiceImpl(EmployeeDao employeeDao) { + this.employeeDao = employeeDao; + } + + public EmployeeDto getEmployee(Long id){ + return employeeDao.getEmployeeById(id); + + } + public List getTopLevelEmployeeList(){ + return employeeDao.getTopLevelEmployees(); + } + +}