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.PlayerFilter; import de.towerdefence.server.player.Player; import de.towerdefence.server.player.PlayerRepository; import de.towerdefence.server.utils.OrderToDirectionMapperService; 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; @Autowired OrderToDirectionMapperService orderToDirectionMapperService; @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(PlayerFilter body) { PlayerFilter.OrderEnum order = body.getOrder(); Integer page = body.getPage(); Integer pageSize = body.getPageSize(); String sortBy = body.getSortBy(); String username = body.getUsername(); Sort.Direction direction = orderToDirectionMapperService.OrderToDirection(order); Pageable pageable = PageRequest.of(page, pageSize, Sort.by(direction, sortBy)); Page playerPage; if (username != null && !username.isEmpty()) { playerPage = playerRepository.findByUsernameContainingIgnoreCase(username, pageable); } else { playerPage = playerRepository.findAll(pageable); } List playersMapped = playerMapperService.mapPlayersToAdministratablePlayers(playerPage.getContent()); return ResponseEntity.ok(playersMapped); } }