package de.towerdefence.server.admin; import com.fasterxml.jackson.databind.ObjectMapper; import de.towerdefence.server.auth.UserSession; import de.towerdefence.server.oas.AdminApi; import de.towerdefence.server.oas.models.AdminAuthInfo; import de.towerdefence.server.oas.models.PlayerApiModel; import de.towerdefence.server.player.Player; import de.towerdefence.server.player.PlayerRepository; import de.towerdefence.server.utils.PlayerMapperService; import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; import java.util.Optional; @Controller @RequestMapping("${openapi.api.base-path:/api/v1}") public class AdminApiController implements AdminApi { @Autowired UserSession userSession; @Autowired PlayerRepository playerRepository; @Autowired PlayerMapperService playerMapperService; @Override public Optional getObjectMapper() { return Optional.empty(); } @Override public Optional getRequest() { return Optional.empty(); } @Override public ResponseEntity adminGetAuthenticated() { AdminAuthInfo authInfo = new AdminAuthInfo(); authInfo.setUsername(this.userSession.getUsername()); return ResponseEntity.ok(authInfo); } @Override public ResponseEntity> getAllPlayers(Integer page, Integer pageSize, String sortBy, String order, String username) { Sort.Direction direction = order.equalsIgnoreCase("asc") ? Sort.Direction.ASC : Sort.Direction.DESC; Pageable pageable = PageRequest.of(page, pageSize, Sort.by(direction, sortBy)); Page playerPage = (username != null && !username.trim().isEmpty()) ? playerRepository.findByUsernameContainingIgnoreCase(username, pageable) : playerRepository.findAll(pageable); List playersMapped = playerMapperService.mapPlayerToApiPlayers(playerPage.getContent()); return playersMapped.isEmpty() ? ResponseEntity.noContent().build() : ResponseEntity.ok(playersMapped); } }