package com.example.springWebFluxByDoms.controller; import com.example.springWebFluxByDoms.dto.UserDto; import com.example.springWebFluxByDoms.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Map; @RestController public class UserController { @Autowired private UserService userService; @PostMapping("/savetheuser") public Mono saveTheUser(@RequestBody Mono userDtoMono){ return userService.saveUser(userDtoMono); } @GetMapping("/profile") public Flux getProfile( @RequestParam(required = false) String firstName, @RequestParam(required = false) String lastName ) { if (firstName == null && lastName == null) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "The query parameter 'firstName' is required"); } UserDto userDto = new UserDto(); userDto.setFirstName(firstName); userDto.setLastName(lastName); Flux userDtoFlux = Flux.just(userDto); return userService.getUsers(userDtoFlux) .switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND, "No users found with the given criteria"))); } @PutMapping("/update/{id}") public Mono updateTheUser(@RequestBody Mono userDtoMono, @PathVariable Integer id) { return userService.updateTheUser(userDtoMono, id); } @DeleteMapping("/delete/{id}") public Mono deleteTheUser(@PathVariable Integer id){ return userService.deleteTheUser(id); } }