package com.example.ascend.demo.database.controller; import com.example.ascend.demo.database.model.Employee; import com.example.ascend.demo.database.model.EmployeeResponse; import com.example.ascend.demo.database.repository.EmployeeRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.List; @RestController public class EmployeeController { @Autowired private EmployeeRepository employeeRepository; // @GetMapping("employees") // public Mono<EmployeeResponse> getEmployees() { // return employeeRepository.findAll().collectList().flatMap(employees -> { // return new Mono<EmployeeResponse>(EmployeeResponse.builder() // .status("OK") // .statusCode(HttpStatus.OK.value()) // .employees(employees) // .message("Got Success Response") // .build(), HttpStatus.OK); // }); // return new ResponseEntity<Flux<EmployeeResponse>>(Flux.just(EmployeeResponse.builder() // .status("OK") // .statusCode(HttpStatus.OK.value()) // .employeeFlux(employeeRepository.findAll()) // .message("Got Success Response") // .build()), HttpStatus.OK); //return empList.map(empVal->EmployeeResponse.builder(). // status("OK").statusCode("200").message("SuccessResponse"). // singleData(empVal).build()); @GetMapping("/employees") public Mono<ResponseEntity<EmployeeResponse>> getEmployees() { return employeeRepository.findAll() .collectList() .map(empList ->ResponseEntity.ok(EmployeeResponse.builder() .status("OK") .statusCode(HttpStatus.OK.value()) .employeeData(empList) .message("Got Success Response") .build())) .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); } @PostMapping("employees") public Mono<Employee> saveEmployee(@RequestBody Employee employee){ return employeeRepository.save(employee); } @DeleteMapping("employees/{id}") public Mono<?> deleteEmployee(@PathVariable Long id){ return employeeRepository.deleteById(id); } @PutMapping("employee/{id}") public Mono<ResponseEntity<EmployeeResponse>> updateEmployee(@PathVariable Long id, @RequestBody Employee updateEmployee){ return employeeRepository.findById(id) .flatMap(existingEmployee -> { existingEmployee.setEmployeeName(updateEmployee.getEmployeeName()); return employeeRepository.save(existingEmployee); }).map(updatedEmployee -> ResponseEntity.ok(EmployeeResponse.builder() .status("OK") .statusCode(HttpStatus.OK.value()) .data(updatedEmployee) .message("Got Success Response") .build())) .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); } @PostMapping(value="/") public Mono<ResponseEntity<EmployeeResponse>> addEmployeeByID(@RequestBody Employee employee) { Mono<Employee> addedEmployee = employeeRepository.save(employee); return addedEmployee.map(addEmp -> ResponseEntity.status(HttpStatus.OK). body(EmployeeResponse.builder(). status("OK").statusCode(HttpStatus.OK.value()).message("Got the Success Response"). data(addEmp).build())). defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); } }