Skip to content
Snippets Groups Projects
Commit 835963c9 authored by Martin Schmollinger's avatar Martin Schmollinger
Browse files

Added service layer between REST controller and JPA repository

parent e7703ba2
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ package io.vsys.payroll.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
......@@ -11,58 +12,36 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import io.vsys.payroll.domain.Employee;
import io.vsys.payroll.domain.EmployeeRepository;
import io.vsys.payroll.exception.EmployeeNotFoundException;
import io.vsys.payroll.service.EmployeeService;
@RestController
public class EmployeeController {
private final EmployeeRepository repository;
@Autowired
private EmployeeService employeeService;
public EmployeeController(EmployeeRepository repository) {
this.repository = repository;
}
// Aggregate root
// tag::get-aggregate-root[]
@GetMapping("/employees")
public List<Employee> all() {
return repository.findAll();
return employeeService.getEmployees();
}
// end::get-aggregate-root[]
@PostMapping("/employees")
public Employee newEmployee(@RequestBody Employee newEmployee) {
return repository.save(newEmployee);
return employeeService.createEmployee(newEmployee);
}
// Single item
@GetMapping("/employees/{id}")
public Employee one(@PathVariable Long id) {
return repository.findById(id)
.orElseThrow(() -> new EmployeeNotFoundException(id));
public Employee one(@PathVariable Long id) {
return employeeService.getEmployee(id);
}
@PutMapping("/employees/{id}")
Employee replaceEmployee(@RequestBody Employee newEmployee, @PathVariable Long id) {
return repository.findById(id)
.map(employee -> {
employee.setName(newEmployee.getName());
employee.setRole(newEmployee.getRole());
return repository.save(employee);
})
.orElseGet(() -> {
newEmployee.setId(id);
return repository.save(newEmployee);
});
Employee replaceEmployee(@RequestBody Employee newEmployee, @PathVariable Long id) {
return employeeService.replaceEmployee(newEmployee, id);
}
@DeleteMapping("/employees/{id}")
void deleteEmployee(@PathVariable Long id) {
repository.deleteById(id);
employeeService.deleteEmployee(id);
}
}
package io.vsys.payroll.service;
import java.util.List;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import io.vsys.payroll.domain.Employee;
import io.vsys.payroll.domain.EmployeeRepository;
import io.vsys.payroll.exception.EmployeeNotFoundException;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
private static final Logger log = LoggerFactory.getLogger(EmployeeService.class);
public List<Employee> getEmployees() {
log.info("Read all employees");
return employeeRepository.findAll();
}
public Employee getEmployee(Long id) {
Optional<Employee> oe = employeeRepository.findById(id);
if (oe.isPresent()) {
log.info("Read employee with ID "+oe.get().getId());
log.debug("New campaign: "+oe.get());
return oe.get();
} else {
throw new EmployeeNotFoundException(id);
}
}
public Employee createEmployee(Employee employee) {
Employee newEmployee = employeeRepository.save(employee);
log.info("Saved new employee with ID "+newEmployee.getId());
log.debug("New campaign: "+newEmployee);
return newEmployee;
}
public Employee replaceEmployee(Employee newEmployee, Long id) {
Optional<Employee> oe = employeeRepository.findById(id);
if (oe.isPresent()) {
Employee employee = oe.get();
log.info("Updated employee with ID "+oe.get().getId());
log.debug("Old data: "+employee);
employee.setName(newEmployee.getName());
employee.setRole(newEmployee.getRole());
log.debug("New data: "+employee);
return employeeRepository.save(employee);
} else {
throw new EmployeeNotFoundException(id);
}
}
public void deleteEmployee(Long id) {
employeeRepository.deleteById(id);
log.info("Deleted employee with ID "+id);
}
}
......@@ -3,4 +3,4 @@ spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.generate-unique-name=false
#logging
logging.level.io.vsys.payroll.payroll.PayrollApplication=DEBUG
logging.level.io.vsys.payroll=DEBUG
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment