From 898ed33e6a540b00fc88573f3071c4f8e677f8b5 Mon Sep 17 00:00:00 2001 From: Dorian Nemec Date: Wed, 12 Mar 2025 12:01:47 +0100 Subject: [PATCH] TD-4: Added banned variable to player --- api/api.yml | 19 +++++++++++++++++++ .../server/admin/AdminApiController.java | 10 ++++++++++ .../de/towerdefence/server/player/Player.java | 10 ++++++---- .../server/player/PlayerService.java | 8 ++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/api/api.yml b/api/api.yml index 5853902..132f35c 100644 --- a/api/api.yml +++ b/api/api.yml @@ -95,6 +95,8 @@ components: properties: username: type: string + id: + type: integer required: - username ############################################# @@ -259,6 +261,23 @@ paths: type: array items: $ref: "#/components/schemas/AdministratablePlayer" + /admin/player/{id}/ban: + parameters: + - in: path + name: id + schema: + type: integer + format: int64 + required: true + post: + operationId: "BanPlayer" + tags: + - admin + summary: "Ban player by id" + description: "Bans a player by id, making them unable to play the game." + responses: + 200: + description: "Successfully banned player!" 401: $ref: "#/components/responses/401Unauthorized" 500: diff --git a/src/main/java/de/towerdefence/server/admin/AdminApiController.java b/src/main/java/de/towerdefence/server/admin/AdminApiController.java index 9356c2a..8e3dee5 100644 --- a/src/main/java/de/towerdefence/server/admin/AdminApiController.java +++ b/src/main/java/de/towerdefence/server/admin/AdminApiController.java @@ -8,6 +8,7 @@ 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.player.PlayerService; import de.towerdefence.server.utils.OrderToDirectionMapperService; import de.towerdefence.server.utils.PlayerMapperService; import jakarta.servlet.http.HttpServletRequest; @@ -36,6 +37,9 @@ public class AdminApiController implements AdminApi { @Autowired PlayerMapperService playerMapperService; + @Autowired + PlayerService playerService; + @Autowired OrderToDirectionMapperService orderToDirectionMapperService; @@ -57,6 +61,12 @@ public class AdminApiController implements AdminApi { return ResponseEntity.ok(authInfo); } + @Override + public ResponseEntity banPlayer(Long id) { + this.playerService.banPlayer(id); + return null; + } + @Override public ResponseEntity> getAllPlayers(PlayerFilter body) { diff --git a/src/main/java/de/towerdefence/server/player/Player.java b/src/main/java/de/towerdefence/server/player/Player.java index 1d84ec9..058b8cf 100644 --- a/src/main/java/de/towerdefence/server/player/Player.java +++ b/src/main/java/de/towerdefence/server/player/Player.java @@ -2,11 +2,9 @@ package de.towerdefence.server.player; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; -import lombok.Setter; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.AllArgsConstructor; +import lombok.*; import jakarta.persistence.*; +import org.hibernate.annotations.ColumnDefault; @NoArgsConstructor @AllArgsConstructor @@ -33,4 +31,8 @@ public class Player { @NotNull @Size(min = PASSWORD_SALT_BYTE_LENGTH, max = PASSWORD_SALT_BYTE_LENGTH) private byte[] passwordSalt; + + @NotNull + @ColumnDefault("false") + private boolean banned; } diff --git a/src/main/java/de/towerdefence/server/player/PlayerService.java b/src/main/java/de/towerdefence/server/player/PlayerService.java index 0cfc6d1..de7a1c5 100644 --- a/src/main/java/de/towerdefence/server/player/PlayerService.java +++ b/src/main/java/de/towerdefence/server/player/PlayerService.java @@ -1,5 +1,6 @@ package de.towerdefence.server.player; +import de.towerdefence.server.oas.models.AdministratablePlayer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -49,4 +50,11 @@ public class PlayerService { md.update(salt); return md.digest(password); } + + public void banPlayer(Long id) { + this.playerRepository.findById(id).ifPresent(player -> { + player.setBanned(true); + this.playerRepository.saveAndFlush(player); + }); + } }