package com.example.wfwebapi.controller; import java.util.List; import java.util.stream.Collectors; import com.example.wfwebapi.assembler.UserModelAssembler; import com.example.wfwebapi.exception.ResourceNotFoundException; import com.example.wfwebapi.model.User; import com.example.wfwebapi.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.EntityModel; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/v1/users") public class UserController { @Autowired private UserRepository userRepository; @Autowired private UserModelAssembler assembler; // GET /api/v1/users/{id} @GetMapping("/{id}") public EntityModel getUserById(@PathVariable Long id) { User user = userRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Utilisateur non trouvé : " + id)); return assembler.toModel(user); } // GET /api/v1/users/all?index=0&count=5 @GetMapping("/all") public CollectionModel> getAllUsers(@RequestParam int index, @RequestParam int count) { List> users = userRepository.findAll(PageRequest.of(index, count)) .stream().map(assembler::toModel) .collect(Collectors.toList()); return CollectionModel.of(users); } // POST /api/v1/users @PostMapping public EntityModel createUser(@RequestBody User newUser) { User user = userRepository.save(newUser); return assembler.toModel(user); } // PUT /api/v1/users?id=1 @PutMapping public EntityModel updateUser(@RequestParam Long id, @RequestBody User updatedUser) { User user = userRepository.findById(id) .map(u -> { u.setUsername(updatedUser.getUsername()); u.setEmail(updatedUser.getEmail()); u.setPassword(updatedUser.getPassword()); u.setImage(updatedUser.getImage()); u.setCreation(updatedUser.getCreation()); return userRepository.save(u); }).orElseThrow(() -> new ResourceNotFoundException("Utilisateur non trouvé : " + id)); return assembler.toModel(user); } // DELETE /api/v1/users?id=1 @DeleteMapping public void deleteUser(@RequestParam Long id) { if (!userRepository.existsById(id)) throw new ResourceNotFoundException("Utilisateur non trouvé : " + id); userRepository.deleteById(id); } }