You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.7 KiB

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<User> 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<EntityModel<User>> getAllUsers(@RequestParam int index, @RequestParam int count) {
List<EntityModel<User>> 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<User> createUser(@RequestBody User newUser) {
User user = userRepository.save(newUser);
return assembler.toModel(user);
}
// PUT /api/v1/users?id=1
@PutMapping
public EntityModel<User> 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);
}
}