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 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> 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 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); } }