2025-02-01 14:18:34 +01:00
|
|
|
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;
|
2025-02-26 11:51:45 +01:00
|
|
|
import de.towerdefence.server.oas.models.AdministratablePlayer;
|
2025-02-26 11:51:45 +01:00
|
|
|
import de.towerdefence.server.oas.models.GetAllPlayersConfigurationData;
|
2025-02-26 10:47:19 +01:00
|
|
|
import de.towerdefence.server.player.Player;
|
|
|
|
import de.towerdefence.server.player.PlayerRepository;
|
|
|
|
import de.towerdefence.server.utils.PlayerMapperService;
|
2025-02-01 14:18:34 +01:00
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
2025-02-26 10:47:19 +01:00
|
|
|
import org.springframework.data.domain.Page;
|
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
|
import org.springframework.data.domain.Sort;
|
2025-02-01 14:18:34 +01:00
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
|
2025-02-26 10:47:19 +01:00
|
|
|
import java.util.List;
|
2025-02-01 14:18:34 +01:00
|
|
|
import java.util.Optional;
|
|
|
|
|
|
|
|
@Controller
|
|
|
|
@RequestMapping("${openapi.api.base-path:/api/v1}")
|
|
|
|
public class AdminApiController implements AdminApi {
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
UserSession userSession;
|
|
|
|
|
2025-02-26 10:47:19 +01:00
|
|
|
@Autowired
|
|
|
|
PlayerRepository playerRepository;
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
PlayerMapperService playerMapperService;
|
|
|
|
|
|
|
|
|
2025-02-01 14:18:34 +01:00
|
|
|
@Override
|
|
|
|
public Optional<ObjectMapper> getObjectMapper() {
|
|
|
|
return Optional.empty();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Optional<HttpServletRequest> getRequest() {
|
|
|
|
return Optional.empty();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ResponseEntity<AdminAuthInfo> adminGetAuthenticated() {
|
|
|
|
AdminAuthInfo authInfo = new AdminAuthInfo();
|
|
|
|
authInfo.setUsername(this.userSession.getUsername());
|
|
|
|
return ResponseEntity.ok(authInfo);
|
|
|
|
}
|
2025-02-26 10:47:19 +01:00
|
|
|
|
|
|
|
@Override
|
2025-02-26 11:51:45 +01:00
|
|
|
public ResponseEntity<List<AdministratablePlayer>> getAllPlayers(GetAllPlayersConfigurationData body) {
|
2025-02-26 10:47:19 +01:00
|
|
|
|
2025-02-26 11:51:45 +01:00
|
|
|
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 = order == GetAllPlayersConfigurationData.OrderEnum.ASCENDING ? Sort.Direction.ASC : Sort.Direction.DESC;
|
2025-02-26 10:47:19 +01:00
|
|
|
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(direction, sortBy));
|
|
|
|
|
2025-02-26 11:51:45 +01:00
|
|
|
Page<Player> playerPage;
|
|
|
|
|
|
|
|
if (username != null && !username.trim().isEmpty()) {
|
|
|
|
playerPage = playerRepository.findByUsernameContainingIgnoreCase(username, pageable);
|
|
|
|
} else {
|
|
|
|
playerPage = playerRepository.findAll(pageable);
|
|
|
|
}
|
2025-02-26 10:47:19 +01:00
|
|
|
|
2025-02-26 11:51:45 +01:00
|
|
|
List<AdministratablePlayer> playersMapped = playerMapperService.mapPlayersToAdministratablePlayers(playerPage.getContent());
|
2025-02-26 10:47:19 +01:00
|
|
|
|
2025-02-26 11:51:45 +01:00
|
|
|
if (playersMapped.isEmpty()) {
|
|
|
|
return ResponseEntity.noContent().build();
|
|
|
|
} else {
|
|
|
|
return ResponseEntity.ok(playersMapped);
|
|
|
|
}
|
2025-02-26 10:47:19 +01:00
|
|
|
}
|
2025-02-01 14:18:34 +01:00
|
|
|
}
|