All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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