From 7b9ad00dc02be5c29450b65ff938a64d69c8def3 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:06:11 +0200
Subject: [PATCH] feat: recruitVeteranPlayer - API, DTO and changes to facade
 and tests

---
 .../dto/PlayerVeteranDTO.java                 | 32 +++++++++++++++++++
 .../facades/TeamManagerFacade.java            |  6 ++--
 .../rest/controller/IceHockeyManagerApi.java  |  6 ++--
 .../facades/TeamManagerFacadeImpl.java        |  7 ++--
 .../facades/TeamManagerFacadeImplTest.java    | 11 +++++--
 5 files changed, 51 insertions(+), 11 deletions(-)
 create mode 100644 api/src/main/java/cz/muni/fi/pa165/icehockeymanager/dto/PlayerVeteranDTO.java

diff --git a/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/dto/PlayerVeteranDTO.java b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/dto/PlayerVeteranDTO.java
new file mode 100644
index 0000000..85319cc
--- /dev/null
+++ b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/dto/PlayerVeteranDTO.java
@@ -0,0 +1,32 @@
+package cz.muni.fi.pa165.icehockeymanager.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Objects;
+
+public final class PlayerVeteranDTO {
+
+    @NotBlank
+    @Getter
+    @Setter
+    private long playerId;
+
+    @Getter
+    @Setter
+    private long teamId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        PlayerVeteranDTO playerDTO = (PlayerVeteranDTO) o;
+        return getPlayerId() == playerDTO.getPlayerId() && getTeamId() == playerDTO.getTeamId();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getPlayerId());
+    }
+}
diff --git a/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacade.java b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacade.java
index 2333273..f291938 100644
--- a/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacade.java
+++ b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacade.java
@@ -2,6 +2,7 @@ package cz.muni.fi.pa165.icehockeymanager.facades;
 
 import cz.muni.fi.pa165.icehockeymanager.dto.PlayerCreateDTO;
 import cz.muni.fi.pa165.icehockeymanager.dto.PlayerDTO;
+import cz.muni.fi.pa165.icehockeymanager.dto.PlayerVeteranDTO;
 import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownPlayerException;
 import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownTeamException;
 
@@ -23,10 +24,9 @@ public interface TeamManagerFacade {
     /**
      * Adds player with playerId to team with teamId
      *
-     * @param playerId Identifier of the player
-     * @param teamId Identifier of the team
+     * @param playerVeteranDTO DTO for recruiting veteran player
      */
-    void recruitVeteranPlayer(long playerId, long teamId);
+    void recruitVeteranPlayer(PlayerVeteranDTO playerVeteranDTO);
 
     /**
      * Retrieve all players without team
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 461ee56..a727278 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
@@ -52,9 +52,9 @@ public class IceHockeyManagerApi {
         teamManagerFacade.recruitNewPlayer(player);
     }
 
-    @PostMapping("/player/recruitFree")
-    public final void recruitFreePlayer(@Valid @RequestBody long playerId) {
-        teamManagerFacade.recruitVeteranPlayer(playerId, 2L);
+    @PostMapping("/player/recruitVeteran")
+    public final void recruitVeteranPlayer(@Valid @RequestBody PlayerVeteranDTO player) {
+        teamManagerFacade.recruitVeteranPlayer(player);
     }
 
 
diff --git a/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java b/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
index 5d1230b..38cbc7a 100644
--- a/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
+++ b/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
@@ -2,6 +2,7 @@ package cz.muni.fi.pa165.icehockeymanager.facades;
 
 import cz.muni.fi.pa165.icehockeymanager.dto.PlayerCreateDTO;
 import cz.muni.fi.pa165.icehockeymanager.dto.PlayerDTO;
+import cz.muni.fi.pa165.icehockeymanager.dto.PlayerVeteranDTO;
 import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownPlayerException;
 import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownTeamException;
 import cz.muni.fi.pa165.icehockeymanager.model.Player;
@@ -41,11 +42,11 @@ public class TeamManagerFacadeImpl implements TeamManagerFacade{
     }
 
     @Override
-    public void recruitVeteranPlayer(long playerId, long teamId){
-        Team team = teamService.findTeam(teamId).orElseThrow(
+    public void recruitVeteranPlayer(PlayerVeteranDTO playerDto){
+        Team team = teamService.findTeam(playerDto.getTeamId()).orElseThrow(
                 () -> new UnknownTeamException("Team not found")
         );
-        Player player = playerService.findPlayer(playerId).orElseThrow(
+        Player player = playerService.findPlayer(playerDto.getPlayerId()).orElseThrow(
                 () -> new UnknownPlayerException("Player not found")
         );
         teamService.addPlayerToTeam(team, player);
diff --git a/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImplTest.java b/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImplTest.java
index 233e5e7..3c492ac 100644
--- a/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImplTest.java
+++ b/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImplTest.java
@@ -3,6 +3,7 @@ package cz.muni.fi.pa165.icehockeymanager.facades;
 import cz.muni.fi.pa165.icehockeymanager.config.PersistanceApplicationConfig;
 import cz.muni.fi.pa165.icehockeymanager.dto.PlayerCreateDTO;
 import cz.muni.fi.pa165.icehockeymanager.dto.PlayerDTO;
+import cz.muni.fi.pa165.icehockeymanager.dto.PlayerVeteranDTO;
 import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownPlayerException;
 import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownTeamException;
 import cz.muni.fi.pa165.icehockeymanager.model.Player;
@@ -103,8 +104,11 @@ public class TeamManagerFacadeImplTest {
     @Test
     public void recruitVeteranPlayerNonexistentTeam() {
         when(teamService.findTeam(1L)).thenReturn(Optional.empty());
+        PlayerVeteranDTO player = new PlayerVeteranDTO();
+        player.setPlayerId(1L);
+        player.setTeamId(1L);
         assertThatExceptionOfType(UnknownTeamException.class).isThrownBy(
-                () -> teamManagerFacade.recruitVeteranPlayer(1L, 1L)
+                () -> teamManagerFacade.recruitVeteranPlayer(player)
         );
         verify(teamService).findTeam(1L);
     }
@@ -112,10 +116,13 @@ public class TeamManagerFacadeImplTest {
     @Test
     public void recruitVeteranPlayerNonexistentPlayer() {
         Team team = buildTeamMock(1L, "Boston Bruins");
+        PlayerVeteranDTO player = new PlayerVeteranDTO();
+        player.setPlayerId(1L);
+        player.setTeamId(1L);
         when(teamService.findTeam(1L)).thenReturn(Optional.ofNullable(team));
         when(playerService.findPlayer(1L)).thenReturn(Optional.empty());
         assertThatExceptionOfType(UnknownPlayerException.class).isThrownBy(
-                () -> teamManagerFacade.recruitVeteranPlayer(1L, 1L)
+                () -> teamManagerFacade.recruitVeteranPlayer(player)
         );
         verify(teamService).findTeam(1L);
     }
-- 
GitLab