package com.example.kafka.controller; import com.example.kafka.entity.User; import com.example.kafka.service.UserServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; /** * User controller for CRUD operation of user activities */ @RestController @RequestMapping("/v1/user") public class UserController { @Autowired private UserServiceImpl userService; /** * Create user * @param user The user * @return The mono of User */ @PostMapping("/create") @ResponseStatus(HttpStatus.ACCEPTED) public Mono createUser(@RequestBody User user){ return userService.createUser(user); } /** * Display all users data * @return The Flux of user */ @GetMapping("/all") public Flux getAllUsers(){ return userService.getAllUsers(); } /** * Fetch particular user by user id * @param userId The userId * @return ResponseEntity of user */ @GetMapping("/{userId}") public Mono> getUserById(@PathVariable String userId){ Mono user = userService.findById(userId); return user.map(ResponseEntity::ok) .defaultIfEmpty(ResponseEntity.notFound().build()); } @GetMapping public Flux getUserByDepartments(@RequestParam(value = "departmentName") String departmentName){ return userService.fetchUserByDepartmentName(departmentName); } /** * Update the user data * @param userId The userId * @param user The user data * @return ResponseEntity of user */ @PutMapping("/{userId}") public Mono> updateUserById(@PathVariable String userId, @RequestBody User user){ return userService.updateUser(userId,user) .map(ResponseEntity::ok) .defaultIfEmpty(ResponseEntity.badRequest().build()); } }