diff --git a/pom.xml b/pom.xml
index 17fd7ad..ee6d255 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,14 @@
spring-boot-starter-test
test
+
+ org.projectlombok
+ lombok
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
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..4e7f44c
--- /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.model.Employee;
+import com.zoomcare.candidatechallenge.service.EmployeeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping(path = "/employees")
+public class EmployeeController {
+ private final EmployeeService employeeService;
+ @Autowired
+ public EmployeeController(EmployeeService employeeService) {
+ this.employeeService = employeeService;
+ }
+
+ @ResponseStatus(code = HttpStatus.OK)
+ @RequestMapping(value = {"", "/toplevel"}, method = RequestMethod.GET)
+ public ResponseEntity> getAllEmployees(){
+ List employees = employeeService.topEmployees();
+ return new ResponseEntity<>(employees, HttpStatus.OK);
+ }
+
+ @ResponseStatus(code = HttpStatus.OK)
+ @GetMapping("/{id}")
+ public ResponseEntity findEmployeeById(@PathVariable("id") Long id){
+ Employee employee = employeeService.getEmployeeById(id);
+ return new ResponseEntity<>(employee, HttpStatus.OK);
+ }
+}
diff --git a/src/main/java/com/zoomcare/candidatechallenge/controller/PropertyController.java b/src/main/java/com/zoomcare/candidatechallenge/controller/PropertyController.java
new file mode 100644
index 0000000..cdc37e2
--- /dev/null
+++ b/src/main/java/com/zoomcare/candidatechallenge/controller/PropertyController.java
@@ -0,0 +1,28 @@
+package com.zoomcare.candidatechallenge.controller;
+import com.zoomcare.candidatechallenge.model.Property;
+import com.zoomcare.candidatechallenge.service.PropertyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping(path = "properties")
+public class PropertyController {
+
+ private final PropertyService propertiesService;
+ @Autowired
+ public PropertyController(PropertyService propertiesService) {
+ this.propertiesService = propertiesService;
+ }
+
+ @ResponseStatus(code = HttpStatus.OK)
+ @GetMapping("")
+ public ResponseEntity> getAllEmployees(){
+ List employees = propertiesService.topProperties();
+ return new ResponseEntity<>(employees, HttpStatus.OK);
+ }
+
+}
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..f97ea5b
--- /dev/null
+++ b/src/main/java/com/zoomcare/candidatechallenge/model/Employee.java
@@ -0,0 +1,29 @@
+package com.zoomcare.candidatechallenge.model;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.List;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name="employee")
+
+public class Employee implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name = "id",nullable = false, updatable = false)
+ private Long id;
+
+ @Column(name = "supervisor_id")
+ private Long supervisorId;
+
+ @OneToMany
+ @JoinColumn(name = "employee_id")
+ private List properties;
+
+}
diff --git a/src/main/java/com/zoomcare/candidatechallenge/model/EmployeePropertyCompositeKey.java b/src/main/java/com/zoomcare/candidatechallenge/model/EmployeePropertyCompositeKey.java
new file mode 100644
index 0000000..b329d96
--- /dev/null
+++ b/src/main/java/com/zoomcare/candidatechallenge/model/EmployeePropertyCompositeKey.java
@@ -0,0 +1,30 @@
+package com.zoomcare.candidatechallenge.model;
+
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+import java.util.Objects;
+
+@Data
+@Embeddable
+public class EmployeePropertyCompositeKey implements Serializable {
+ @Column(name = "key")
+ private String key;
+ @Column(name = "employee_id")
+ private Long employeeId;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof EmployeePropertyCompositeKey)) return false;
+ EmployeePropertyCompositeKey that = (EmployeePropertyCompositeKey) o;
+ return key == that.key && Objects.equals(employeeId, that.employeeId);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(key, employeeId);
+ }
+}
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..bf315a9
--- /dev/null
+++ b/src/main/java/com/zoomcare/candidatechallenge/model/Property.java
@@ -0,0 +1,19 @@
+package com.zoomcare.candidatechallenge.model;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name="property")
+public class Property implements Serializable {
+
+ private String value;
+ @EmbeddedId
+ private EmployeePropertyCompositeKey id;
+}
diff --git a/src/main/java/com/zoomcare/candidatechallenge/repo/EmployeeRepo.java b/src/main/java/com/zoomcare/candidatechallenge/repo/EmployeeRepo.java
new file mode 100644
index 0000000..dcc026e
--- /dev/null
+++ b/src/main/java/com/zoomcare/candidatechallenge/repo/EmployeeRepo.java
@@ -0,0 +1,11 @@
+package com.zoomcare.candidatechallenge.repo;
+
+import com.zoomcare.candidatechallenge.model.Employee;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+@Repository
+public interface EmployeeRepo extends JpaRepository {
+ Optional findEmployeeById(Long id);
+}
diff --git a/src/main/java/com/zoomcare/candidatechallenge/repo/PropertyRepo.java b/src/main/java/com/zoomcare/candidatechallenge/repo/PropertyRepo.java
new file mode 100644
index 0000000..9996095
--- /dev/null
+++ b/src/main/java/com/zoomcare/candidatechallenge/repo/PropertyRepo.java
@@ -0,0 +1,9 @@
+package com.zoomcare.candidatechallenge.repo;
+
+import com.zoomcare.candidatechallenge.model.Property;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface PropertyRepo extends JpaRepository {
+}
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..fd4f357
--- /dev/null
+++ b/src/main/java/com/zoomcare/candidatechallenge/service/EmployeeService.java
@@ -0,0 +1,32 @@
+package com.zoomcare.candidatechallenge.service;
+
+import com.zoomcare.candidatechallenge.model.Employee;
+import com.zoomcare.candidatechallenge.repo.EmployeeRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class EmployeeService {
+ private final EmployeeRepo employeeRepo;
+
+ @Autowired
+ public EmployeeService(EmployeeRepo employeeRepo) {
+ this.employeeRepo = employeeRepo;
+ }
+
+ public List topEmployees(){
+ List employeeList = employeeRepo.findAll();
+ return employeeList;
+ }
+
+ public Employee getEmployeeById(Long id){
+ Optional employeeOptional = employeeRepo.findEmployeeById(id);
+ if(employeeOptional.isPresent()){
+ return employeeOptional.get();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/zoomcare/candidatechallenge/service/PropertyService.java b/src/main/java/com/zoomcare/candidatechallenge/service/PropertyService.java
new file mode 100644
index 0000000..fac35d6
--- /dev/null
+++ b/src/main/java/com/zoomcare/candidatechallenge/service/PropertyService.java
@@ -0,0 +1,21 @@
+package com.zoomcare.candidatechallenge.service;
+import com.zoomcare.candidatechallenge.model.Property;
+import com.zoomcare.candidatechallenge.repo.PropertyRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.List;
+
+@Service
+public class PropertyService {
+ public final PropertyRepo propertiesRepo;
+
+ @Autowired
+ public PropertyService(PropertyRepo propertiesRepo) {
+ this.propertiesRepo = propertiesRepo;
+ }
+
+ public List topProperties(){
+ List propertiesList = propertiesRepo.findAll();
+ return propertiesList;
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 4408d17..e607eaa 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,6 +2,8 @@ spring:
h2:
console:
enabled: true
+ main:
+ allow-bean-definition-overriding: 'true'
management:
endpoints:
web: