diff --git a/src/main/java/io/vsys/payroll/controller/EmployeeController.java b/src/main/java/io/vsys/payroll/controller/EmployeeController.java index 23dd334846953b3e3cf8cce5bc88c89ccba64241..6377570e39e4cd9edf8649400f0b8b5f0403af45 100644 --- a/src/main/java/io/vsys/payroll/controller/EmployeeController.java +++ b/src/main/java/io/vsys/payroll/controller/EmployeeController.java @@ -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); } } diff --git a/src/main/java/io/vsys/payroll/service/EmployeeService.java b/src/main/java/io/vsys/payroll/service/EmployeeService.java new file mode 100644 index 0000000000000000000000000000000000000000..67ac511b215357d9a2c700b3ad38ba55335a81a7 --- /dev/null +++ b/src/main/java/io/vsys/payroll/service/EmployeeService.java @@ -0,0 +1,66 @@ +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); + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fa26adae5d9055323e147a1c167d05c1fbaffceb..a26d27e60bec06e2b5b81c8f0782ed86247a4466 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -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