62 lines
2.3 KiB
Java
62 lines
2.3 KiB
Java
package com.example.questionbank.web.rest;
|
|
|
|
import com.example.questionbank.service.UserService;
|
|
import com.example.questionbank.service.dto.UserDTO;
|
|
import java.util.*;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.data.domain.Page;
|
|
import org.springframework.data.domain.Pageable;
|
|
import org.springframework.data.domain.Sort;
|
|
import org.springframework.http.HttpHeaders;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
|
|
import tech.jhipster.web.util.PaginationUtil;
|
|
|
|
@RestController
|
|
@RequestMapping("/api")
|
|
public class PublicUserResource {
|
|
|
|
private static final List<String> ALLOWED_ORDERED_PROPERTIES = List.of(
|
|
"id",
|
|
"login",
|
|
"firstName",
|
|
"lastName",
|
|
"email",
|
|
"activated",
|
|
"langKey"
|
|
);
|
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(PublicUserResource.class);
|
|
|
|
private final UserService userService;
|
|
|
|
public PublicUserResource(UserService userService) {
|
|
this.userService = userService;
|
|
}
|
|
|
|
/**
|
|
* {@code GET /users} : get all users with only public information - calling this method is allowed for anyone.
|
|
*
|
|
* @param pageable the pagination information.
|
|
* @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body all users.
|
|
*/
|
|
@GetMapping("/users")
|
|
public ResponseEntity<List<UserDTO>> getAllPublicUsers(@org.springdoc.core.annotations.ParameterObject Pageable pageable) {
|
|
LOG.debug("REST request to get all public User names");
|
|
if (!onlyContainsAllowedProperties(pageable)) {
|
|
return ResponseEntity.badRequest().build();
|
|
}
|
|
|
|
final Page<UserDTO> page = userService.getAllPublicUsers(pageable);
|
|
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
|
|
return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
|
|
}
|
|
|
|
private boolean onlyContainsAllowedProperties(Pageable pageable) {
|
|
return pageable.getSort().stream().map(Sort.Order::getProperty).allMatch(ALLOWED_ORDERED_PROPERTIES::contains);
|
|
}
|
|
}
|