From cabac1fa271f2cdcf1a5f83f95b6478f8a2e3ef0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A1n=20Dovjak?= <xdovjak@fi.muni.cz>
Date: Fri, 28 May 2021 17:40:21 +0200
Subject: [PATCH] feat: updateGame API

---
 .../icehockeymanager/dto/GameUpdateDTO.java   | 25 +++++++++++++++++++
 .../facades/LeagueManagerFacade.java          |  7 +++---
 .../rest/controller/IceHockeyManagerApi.java  |  5 ++++
 .../facades/LeagueManagerFacadeImpl.java      |  7 +++---
 .../facades/LeagueManagerFacadeImplTest.java  | 12 ++++++++-
 5 files changed, 48 insertions(+), 8 deletions(-)
 create mode 100644 api/src/main/java/cz/muni/fi/pa165/icehockeymanager/dto/GameUpdateDTO.java

diff --git a/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/dto/GameUpdateDTO.java b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/dto/GameUpdateDTO.java
new file mode 100644
index 0000000..6112793
--- /dev/null
+++ b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/dto/GameUpdateDTO.java
@@ -0,0 +1,25 @@
+package cz.muni.fi.pa165.icehockeymanager.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.PositiveOrZero;
+
+public class GameUpdateDTO {
+
+    @NotNull
+    @Getter
+    @Setter
+    private Long id;
+
+    @PositiveOrZero
+    @Getter
+    @Setter
+    private int homeTeamScore;
+
+    @PositiveOrZero
+    @Getter
+    @Setter
+    private int awayTeamScore;
+}
diff --git a/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacade.java b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacade.java
index 3997924..23d18dd 100644
--- a/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacade.java
+++ b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacade.java
@@ -1,6 +1,7 @@
 package cz.muni.fi.pa165.icehockeymanager.facades;
 
 import cz.muni.fi.pa165.icehockeymanager.dto.GameCreateDTO;
+import cz.muni.fi.pa165.icehockeymanager.dto.GameUpdateDTO;
 import cz.muni.fi.pa165.icehockeymanager.dto.TeamCreateDTO;
 
 /**
@@ -24,11 +25,9 @@ public interface LeagueManagerFacade {
 
     /**
      * Updates the game score and also the winner if one is determined by the new score.
-     * @param gameId ID of the game to be updated.
-     * @param homeTeamScore the new score of the home team.
-     * @param awayTeamScore the new score of the away team.
+     * @param game DTO for updating game
      */
-    void updateGameScore(long gameId, int homeTeamScore, int awayTeamScore);
+    void updateGameScore(GameUpdateDTO game);
 
     /**
      * Sets the winner of a game.
diff --git a/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/rest/controller/IceHockeyManagerApi.java b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/rest/controller/IceHockeyManagerApi.java
index 81aa1e0..7eeff9c 100644
--- a/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/rest/controller/IceHockeyManagerApi.java
+++ b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/rest/controller/IceHockeyManagerApi.java
@@ -74,6 +74,11 @@ public class IceHockeyManagerApi {
         leagueManagerFacade.scheduleGame(game);
     }
 
+    @PutMapping("/game/update")
+    public final void updateGame(@Valid @RequestBody GameUpdateDTO game) {
+        leagueManagerFacade.updateGameScore(game);
+    }
+
     @GetMapping("/game/team/{id}")
     public final Collection<GameDTO> getGamesForTeam(@PathVariable Long id) {
         return userFacade.getGamesForTeam(id);
diff --git a/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacadeImpl.java b/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacadeImpl.java
index d18ed5e..ef6f3d9 100644
--- a/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacadeImpl.java
+++ b/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacadeImpl.java
@@ -1,6 +1,7 @@
 package cz.muni.fi.pa165.icehockeymanager.facades;
 
 import cz.muni.fi.pa165.icehockeymanager.dto.GameCreateDTO;
+import cz.muni.fi.pa165.icehockeymanager.dto.GameUpdateDTO;
 import cz.muni.fi.pa165.icehockeymanager.dto.TeamCreateDTO;
 import cz.muni.fi.pa165.icehockeymanager.dto.TeamDTO;
 import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownGameException;
@@ -48,11 +49,11 @@ public class LeagueManagerFacadeImpl implements LeagueManagerFacade {
     }
 
     @Override
-    public void updateGameScore(long gameId, int homeTeamScore, int awayTeamScore) {
-        Game game = gameService.findGame(gameId).orElseThrow(
+    public void updateGameScore(GameUpdateDTO gameDTO) {
+        Game game = gameService.findGame(gameDTO.getId()).orElseThrow(
                 () -> new UnknownGameException("Game not found")
         );
-        gameService.updateGameScore(game, homeTeamScore, awayTeamScore);
+        gameService.updateGameScore(game, gameDTO.getHomeTeamScore(), gameDTO.getAwayTeamScore());
     }
 
     @Override
diff --git a/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacadeImplTest.java b/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacadeImplTest.java
index b232248..de16e7f 100644
--- a/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacadeImplTest.java
+++ b/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/LeagueManagerFacadeImplTest.java
@@ -2,6 +2,7 @@ package cz.muni.fi.pa165.icehockeymanager.facades;
 
 import cz.muni.fi.pa165.icehockeymanager.config.PersistanceApplicationConfig;
 import cz.muni.fi.pa165.icehockeymanager.dto.GameCreateDTO;
+import cz.muni.fi.pa165.icehockeymanager.dto.GameUpdateDTO;
 import cz.muni.fi.pa165.icehockeymanager.dto.TeamCreateDTO;
 import cz.muni.fi.pa165.icehockeymanager.dto.TeamDTO;
 import cz.muni.fi.pa165.icehockeymanager.model.Game;
@@ -71,6 +72,14 @@ public class LeagueManagerFacadeImplTest {
         return gameCreateDTO;
     }
 
+    public GameUpdateDTO buildGameUpdateDTO(Game game, int homeScore, int awayScore) {
+        var gameUpdate = new GameUpdateDTO();
+        gameUpdate.setId(game.getId());
+        gameUpdate.setAwayTeamScore(awayScore);
+        gameUpdate.setHomeTeamScore(homeScore);
+        return gameUpdate;
+    }
+
     @Test
     public void scheduleGame() {
         var edmonton = buildTeamDTO(1L, "Edmonton Oilers");
@@ -95,8 +104,9 @@ public class LeagueManagerFacadeImplTest {
     @Test
     public void updateGameScore() {
         var game = buildGameMock(1L);
+        var gameUpdate = buildGameUpdateDTO(game, 1, 2);
         when(gameService.findGame(1L)).thenReturn(Optional.ofNullable(game));
-        leagueManagerFacade.updateGameScore(1L, 1, 2);
+        leagueManagerFacade.updateGameScore(gameUpdate);
         verify(gameService).updateGameScore(game, 1, 2);
     }
 
-- 
GitLab