UsersController.java

  1. package edu.ucsb.cs156.happiercows.controllers;

  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.ObjectMapper;

  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.http.ResponseEntity;
  6. import org.springframework.security.access.prepost.PreAuthorize;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.PostMapping;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RequestParam;
  11. import org.springframework.web.bind.annotation.RestController;

  12. import edu.ucsb.cs156.happiercows.entities.User;
  13. import edu.ucsb.cs156.happiercows.errors.EntityNotFoundException;
  14. import edu.ucsb.cs156.happiercows.repositories.UserRepository;
  15. import io.swagger.v3.oas.annotations.tags.Tag;
  16. import io.swagger.v3.oas.annotations.Operation;
  17. import io.swagger.v3.oas.annotations.Parameter;

  18. @Tag(name="User information (admin only)")
  19. @RequestMapping("/api/admin/users")
  20. @RestController
  21. public class UsersController extends ApiController {
  22.     @Autowired
  23.     UserRepository userRepository;

  24.     @Autowired
  25.     ObjectMapper mapper;

  26.     @Operation(summary = "Get a list of all users")
  27.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  28.     @GetMapping("")
  29.     public ResponseEntity<String> users()
  30.             throws JsonProcessingException {
  31.         Iterable<User> users = userRepository.findAll();
  32.         String body = mapper.writeValueAsString(users);
  33.         return ResponseEntity.ok().body(body);
  34.     }
  35.    
  36.     @Operation(summary = "Suspend a user by id")
  37.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  38.     @PostMapping("/suspend")
  39.     public Object suspendUser(@Parameter(name="userId") @RequestParam long userId ) throws JsonProcessingException {

  40.         User user = userRepository.findById(userId).orElseThrow(() -> new EntityNotFoundException(User.class, userId));

  41.         user.setSuspended(true);
  42.         userRepository.save(user);
  43.         return genericMessage("User with id %d suspended".formatted(userId));
  44.     }

  45.     @Operation(summary="Restore a user by id")
  46.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  47.     @PostMapping("/restore")
  48.     public Object restoreUser(@Parameter(name="userId") @RequestParam long userId ) throws JsonProcessingException {
  49.         User user = userRepository.findById(userId).orElseThrow(() -> new EntityNotFoundException(User.class, userId));

  50.         user.setSuspended(false);
  51.         userRepository.save(user);
  52.         return genericMessage("User with id %d restored".formatted(userId));
  53.     }
  54. }