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.AdministratablePlayer; import de.towerdefence.server.oas.models.GetAllPlayersConfigurationData; 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(GetAllPlayersConfigurationData body) { var order = body.getOrder(); var page = body.getPage(); var pageSize = body.getPageSize(); var sortBy = body.getSortBy(); var username = body.getUsername(); if (order == null) { order = GetAllPlayersConfigurationData.OrderEnum.DESCENDING; } Sort.Direction direction; if (order == GetAllPlayersConfigurationData.OrderEnum.ASCENDING) { direction = Sort.Direction.ASC; } else { direction = Sort.Direction.DESC; } Pageable pageable = PageRequest.of(page, pageSize, Sort.by(direction, sortBy)); Page playerPage; if (username != null && !username.trim().isEmpty()) { playerPage = playerRepository.findByUsernameContainingIgnoreCase(username, pageable); } else { playerPage = playerRepository.findAll(pageable); } List playersMapped = playerMapperService.mapPlayersToAdministratablePlayers(playerPage.getContent()); if (playersMapped.isEmpty()) { return ResponseEntity.noContent().build(); } else { return ResponseEntity.ok(playersMapped); } } }