package pl.dmcs.userservice.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import pl.dmcs.userservice.dto.request.UpdateUserRequest; import pl.dmcs.userservice.dto.request.UserRequest; import pl.dmcs.userservice.dto.response.UserResponse; import pl.dmcs.userservice.mapper.UserMapper; import pl.dmcs.userservice.model.User; import pl.dmcs.userservice.service.UserService; import jakarta.validation.Valid; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @RestController @RequestMapping("/api/user") public class UserController { private final UserService userService; private final UserMapper userMapper; @Autowired public UserController(UserService userService, UserMapper userMapper) { this.userService = userService; this.userMapper = userMapper; } @GetMapping public ResponseEntity> getAllUsers() { List users = userService.getAllUsers(); List responses = users.stream() .map(userMapper::toResponse) .collect(Collectors.toList()); return ResponseEntity.ok(responses); } @GetMapping("/{id}") public ResponseEntity getUserById(@PathVariable UUID id) { User user = userService.getUserById(id); return ResponseEntity.ok(userMapper.toResponse(user)); } @PostMapping public ResponseEntity createUser(@Valid @RequestBody UserRequest request) { User user = userMapper.toEntity(request); User createdUser = userService.createUser(user); return ResponseEntity.status(HttpStatus.CREATED).body(userMapper.toResponse(createdUser)); } @PutMapping("/{id}") public ResponseEntity updateUser( @PathVariable UUID id, @Valid @RequestBody UserRequest request) { User updatedUser = userService.updateUserWithPut(id, request); return ResponseEntity.ok(userMapper.toResponse(updatedUser)); } @PatchMapping("/{id}") public ResponseEntity partialUpdateUser( @PathVariable UUID id, @Valid @RequestBody UpdateUserRequest request) { User updatedUser = userService.updateUserWithPatch(id, request); return ResponseEntity.ok(userMapper.toResponse(updatedUser)); } @DeleteMapping("/{id}") public ResponseEntity deleteUser(@PathVariable UUID id) { userService.deleteUser(id); return ResponseEntity.noContent().build(); } }