content: package com.konsol.beatstream.web.rest;
  
  import com.konsol.beatstream.service.UserService;
  import com.konsol.beatstream.service.dto.UserDTO;
  import java.util.*;
  import java.util.Collections;
  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 = Collections.unmodifiableList(
          Arrays.asList("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);
      }
  }
  