package com.example.demo.controller; import com.example.demo.model.Employee; import com.example.demo.repository.EmployeeRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.ArrayList; import java.util.List; @RestController public class ReactController { @Autowired private EmployeeRepository employeeRepository; @PostMapping(value = "/employees") public Mono createEmployee(@RequestBody Employee newEmployee) { Mono employeeMono = employeeRepository.save(newEmployee); CustomEmployeeResponse cer = new CustomEmployeeResponse(); return employeeMono.flatMap(e -> { newEmployee.setEmployeeId(e.getEmployeeId()); List dataList = new ArrayList<>(); dataList.add(newEmployee); cer.setData(dataList); cer.setStatus("OK"); cer.setStatusCode("200"); cer.setMessage("Successfully created new employee"); return Mono.just(cer); }); } @GetMapping(value = "/employees") public Mono getEmployees() { Flux employeeFlux = employeeRepository.findAll(); CustomEmployeeResponse cer = new CustomEmployeeResponse(); cer.setStatus("OK"); cer.setStatusCode("200"); cer.setMessage("Successfully retrieved all employees"); return employeeFlux.flatMap(e -> { cer.addEmployee(e); return Flux.just(0); }).then(Mono.just(cer)); } @GetMapping(value = "/employees/{id}") public Mono getEmployee(@PathVariable Long id) { Mono employeeMono = employeeRepository.findById(id); CustomEmployeeResponse cer = new CustomEmployeeResponse(); cer.setStatus("OK"); cer.setStatusCode("200"); cer.setMessage("Successfully retrieved employee"); return employeeMono.flatMap(e -> { cer.addEmployee(e); return Mono.just(cer); }); } @PutMapping(value = "employees/{id}") public Mono updateEmployee(@PathVariable Long id, @RequestBody Employee updatedEmployee) { Mono employeeMono = employeeRepository.findById(id); CustomEmployeeResponse cer = new CustomEmployeeResponse(); cer.setStatus("OK"); cer.setStatusCode("200"); cer.setMessage("Successfully updated employee"); return employeeMono.flatMap(e -> { e.setEmployeeName(updatedEmployee.getEmployeeName()); cer.addEmployee(e); employeeRepository.save(e).subscribe(); return Mono.just(cer); }); } @PostMapping(value = "employees/{id}") public Mono deleteEmployee(@PathVariable Long id) { Mono employeeMono = employeeRepository.findById(id); CustomEmployeeResponse cer = new CustomEmployeeResponse(); cer.setStatus("OK"); cer.setStatusCode("200"); cer.setMessage("Successfully deleted employee"); return employeeMono.flatMap(e -> { cer.addEmployee(e); employeeRepository.deleteById(id).subscribe(); return Mono.just(cer); }); } }