diff --git a/employee-manager/src/main/java/com/example/demo/controller/EmployeeController.java b/employee-manager/src/main/java/com/example/demo/controller/EmployeeController.java index b18fd89f..f288a708 100644 --- a/employee-manager/src/main/java/com/example/demo/controller/EmployeeController.java +++ b/employee-manager/src/main/java/com/example/demo/controller/EmployeeController.java @@ -8,58 +8,71 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.net.URI; import java.time.Instant; -import java.util.HashMap; -import java.util.Map; import java.util.List; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + @RestController -@RequestMapping("/api/") +@RequestMapping("/api") public class EmployeeController { @Autowired private EmployeeRepository employeeRepository; - //get employees - @GetMapping("employees") - public List getAllEmployee() { - return this.employeeRepository.findAll(); - } + // Get all employees + @GetMapping(value = "/employees", produces = "application/json") + public List getAllEmployees() { + return employeeRepository.findAll(); + } - //get employee by id - @GetMapping("employees/{id}") + // Get employee by ID + @GetMapping(value = "/employees/{id}", produces = "application/json") public ResponseEntity getEmployeeById(@PathVariable(value = "id") Long employeeId) throws ResourceNotFoundException { - Employee employee = employeeRepository.findById(employeeId).orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId)); - return ResponseEntity.ok().body(employee); + Employee employee = employeeRepository.findById(employeeId) + .orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId)); + return ResponseEntity.ok(employee); + } + + // Create employee + @PostMapping(value = "/employees", consumes = "application/json", produces = "application/json") + public ResponseEntity createEmployee(@Valid @RequestBody Employee employee) { + employee.setTimestamp(Instant.now().getEpochSecond()); + Employee savedEmployee = employeeRepository.save(employee); + + URI location = ServletUriComponentsBuilder.fromCurrentRequest() + .path("/{id}") + .buildAndExpand(savedEmployee.getId()) + .toUri(); + + return ResponseEntity.created(location).body(savedEmployee); } - //save employee - @PostMapping("employees") - public Employee createEmployee(@RequestBody Employee employee) { + // Update employee + @PutMapping(value = "/employees/{id}", consumes = "application/json", produces = "application/json") + public ResponseEntity updateEmployee(@PathVariable(value = "id") Long employeeId, + @Valid @RequestBody Employee employeeDetails) throws ResourceNotFoundException { + + Employee employee = employeeRepository.findById(employeeId) + .orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId)); + + employee.setEmail(employeeDetails.getEmail()); + employee.setFirstName(employeeDetails.getFirstName()); + employee.setLastName(employeeDetails.getLastName()); employee.setTimestamp(Instant.now().getEpochSecond()); - return this.employeeRepository.save(employee); + + Employee updatedEmployee = employeeRepository.save(employee); + return ResponseEntity.ok(updatedEmployee); } -// //update employee - @PutMapping("employees/{id}") - public ResponseEntity updateEmployee(@PathVariable(value = "id") Long employeeId, @Valid @RequestBody Employee employeeDetails) throws ResourceNotFoundException { - - Employee employee = employeeRepository.findById(employeeId).orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId)); - employee.setEmail(employeeDetails.getEmail()); - employee.setFirstName(employeeDetails.getFirstName()); - employee.setLastName(employeeDetails.getLastName()); - employee.setTimestamp(Instant.now().getEpochSecond()); - return ResponseEntity.ok(this.employeeRepository.save(employee)); - } - -// //delete employee - @DeleteMapping("employees/{id}") - public Map deleteEmployee(@PathVariable(value = "id") Long employeeId) throws ResourceNotFoundException { - Employee employee = employeeRepository.findById(employeeId).orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId)); - this.employeeRepository.delete(employee); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - - return response; - } -} \ No newline at end of file + // Delete employee + @DeleteMapping(value = "/employees/{id}") + public ResponseEntity deleteEmployee(@PathVariable(value = "id") Long employeeId) throws ResourceNotFoundException { + Employee employee = employeeRepository.findById(employeeId) + .orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId)); + + employeeRepository.delete(employee); + return ResponseEntity.noContent().build(); + } +}