
ru.mynewtons.starter.oauth2.controller.UserController Maven / Gradle / Ivy
The newest version!
package ru.mynewtons.starter.oauth2.controller;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import ru.mynewtons.starter.oauth2.domain.Role;
import ru.mynewtons.starter.oauth2.domain.UserDetails;
import ru.mynewtons.starter.oauth2.service.RoleService;
import ru.mynewtons.starter.oauth2.service.UserDetailsService;
import java.util.List;
import java.util.Set;
@RestController
@RequestMapping("/api/users")
@Api(value = "users", description = "User API")
@Slf4j
public class UserController {
@Autowired
private UserDetailsService userService;
@Autowired
private RoleService roleService;
@RequestMapping(value = "/roles", method = RequestMethod.GET)
@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
public ResponseEntity> getAllRoles(@AuthenticationPrincipal UserDetails userDetails) {
return new ResponseEntity<>(roleService.findAll(), HttpStatus.OK);
}
/**
* Get user details
*/
@RequestMapping(value = "/{userId}", method = RequestMethod.GET)
@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
public ResponseEntity getUser(@PathVariable String userId) {
return new ResponseEntity<>(userService.findById(userId), HttpStatus.OK);
}
/**
* Enable an existing user object
*
* @return the response entity with user object
*/
@ApiOperation(value = "Enable an existing user", response = UserDetails.class, httpMethod = "PATCH")
@ApiResponses(value = {
@ApiResponse(code = 404, message = "User not found"),
@ApiResponse(code = 400, message = "Bad request"),
@ApiResponse(code = 500, message = "Server error")
})
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "User Id", required = true, dataType = "String",
paramType = "path")
})
@RequestMapping(value = "/{userId}/enable", method = RequestMethod.PATCH)
@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
public ResponseEntity enableUser(@PathVariable String userId,
@RequestParam(required = false) String comment,
@AuthenticationPrincipal UserDetails userDetails) {
// Сan not change yourself field "enable"
if (userDetails.getId().equals(userId)) {
return new ResponseEntity<>(userDetails, HttpStatus.OK);
}
return new ResponseEntity<>(userService.enableUser(userId, comment), HttpStatus.OK);
}
/**
* Disables an existing user object
*
* @return the response entity with user object
*/
@ApiOperation(value = "Disable an existing user", response = UserDetails.class, httpMethod = "PATCH")
@ApiResponses(value = {
@ApiResponse(code = 404, message = "User not found"),
@ApiResponse(code = 400, message = "Bad request"),
@ApiResponse(code = 500, message = "Server error")
})
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "User Id", required = true, dataType = "String",
paramType = "path")
})
@RequestMapping(value = "/{userId}/disable", method = RequestMethod.PATCH)
@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
public ResponseEntity disableUser(@PathVariable String userId,
@RequestParam(required = false) String comment,
@AuthenticationPrincipal UserDetails userDetails) {
// Сan not change yourself field "enable"
if (userDetails.getId().equals(userId)) {
return new ResponseEntity<>(userDetails, HttpStatus.OK);
}
return new ResponseEntity<>(userService.disableUser(userId, comment), HttpStatus.OK);
}
@PostMapping(path = "/by-id")
public ResponseEntity> getUsersByIds(@RequestBody Set ids) {
return new ResponseEntity<>(userService.findAllByIds(ids), HttpStatus.OK);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy