Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,14 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -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<List<Employee>> getAllEmployees(){
List<Employee> employees = employeeService.topEmployees();
return new ResponseEntity<>(employees, HttpStatus.OK);
}

@ResponseStatus(code = HttpStatus.OK)
@GetMapping("/{id}")
public ResponseEntity<Employee> findEmployeeById(@PathVariable("id") Long id){
Employee employee = employeeService.getEmployeeById(id);
return new ResponseEntity<>(employee, HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
@@ -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<List<Property>> getAllEmployees(){
List<Property> employees = propertiesService.topProperties();
return new ResponseEntity<>(employees, HttpStatus.OK);
}

}
29 changes: 29 additions & 0 deletions src/main/java/com/zoomcare/candidatechallenge/model/Employee.java
Original file line number Diff line number Diff line change
@@ -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<Property> properties;

}
Original file line number Diff line number Diff line change
@@ -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);
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/zoomcare/candidatechallenge/model/Property.java
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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<Employee, Long> {
Optional<Employee> findEmployeeById(Long id);
}
Original file line number Diff line number Diff line change
@@ -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<Property, Long> {
}
Original file line number Diff line number Diff line change
@@ -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<Employee> topEmployees(){
List<Employee> employeeList = employeeRepo.findAll();
return employeeList;
}

public Employee getEmployeeById(Long id){
Optional<Employee> employeeOptional = employeeRepo.findEmployeeById(id);
if(employeeOptional.isPresent()){
return employeeOptional.get();
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -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<Property> topProperties(){
List<Property> propertiesList = propertiesRepo.findAll();
return propertiesList;
}
}
2 changes: 2 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ spring:
h2:
console:
enabled: true
main:
allow-bean-definition-overriding: 'true'
management:
endpoints:
web:
Expand Down