From f6a415628b3a68cff59894975cc1f540b02bb1d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A1n=20Dovjak?= <xdovjak@fi.muni.cz>
Date: Tue, 27 Apr 2021 20:01:39 +0200
Subject: [PATCH] feat: TeamManager firePlayer

---
 .../facades/TeamManagerFacadeImpl.java           | 14 +++++++++++---
 .../fi/pa165/icehockeymanager/model/Team.java    |  4 ++++
 .../icehockeymanager/services/PlayerService.java |  5 +++++
 .../services/PlayerServiceImpl.java              | 16 ++++++++++++++++
 .../icehockeymanager/services/TeamService.java   |  4 +++-
 .../services/TeamServiceImpl.java                | 12 +++++++++++-
 6 files changed, 50 insertions(+), 5 deletions(-)

diff --git a/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java b/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
index 6711648..06dd6c5 100644
--- a/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
+++ b/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
@@ -38,7 +38,7 @@ public class TeamManagerFacadeImpl implements TeamManagerFacade{
         );
         Player newPlayer = beanMappingService.mapTo(playerCreateDTO, Player.class);
         playerService.createPlayer(newPlayer, team);
-        teamService.addPlayerToTeam(newPlayer, team);
+        teamService.addPlayerToTeam(team, newPlayer);
     }
 
     @Override
@@ -49,7 +49,8 @@ public class TeamManagerFacadeImpl implements TeamManagerFacade{
         Player player = playerService.findPlayer(playerId).orElseThrow(
                 () -> new UnknownPlayerException("Player not found")
         );
-        teamService.addPlayerToTeam(player, team);
+        teamService.addPlayerToTeam(team, player);
+        playerService.addTeamToPlayer(player, team);
     }
 
     @Override
@@ -60,6 +61,13 @@ public class TeamManagerFacadeImpl implements TeamManagerFacade{
 
     @Override
     public void firePlayer(long playerId, long teamId) {
-
+        Team team = teamService.getTeam(teamId).orElseThrow(
+                () -> new UnknownTeamException("Team not found")
+        );
+        Player player = playerService.findPlayer(playerId).orElseThrow(
+                () -> new UnknownPlayerException("Player not found")
+        );
+        teamService.removePlayerFromTeam(team, player);
+        playerService.removeTeamFromPlayer(player, team);
     }
 }
diff --git a/src/main/java/cz/muni/fi/pa165/icehockeymanager/model/Team.java b/src/main/java/cz/muni/fi/pa165/icehockeymanager/model/Team.java
index ab5bc00..2b62082 100644
--- a/src/main/java/cz/muni/fi/pa165/icehockeymanager/model/Team.java
+++ b/src/main/java/cz/muni/fi/pa165/icehockeymanager/model/Team.java
@@ -65,6 +65,10 @@ public class Team implements IDEqual, DirtyHash {
         return players.remove(player);
     }
 
+    public boolean containsPlayer(Player player) {
+        return players.contains(player);
+    }
+
     @Override
     public String toString() {
         return "Team{" +
diff --git a/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/PlayerService.java b/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/PlayerService.java
index 035ccfb..e9f887a 100644
--- a/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/PlayerService.java
+++ b/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/PlayerService.java
@@ -23,4 +23,9 @@ public interface PlayerService {
     void createPlayer(Player player, Team team);
 
     Collection<Player> getFreePlayers();
+
+    void addTeamToPlayer(Player player, Team team);
+
+    void removeTeamFromPlayer(Player player, Team team);
+
 }
diff --git a/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/PlayerServiceImpl.java b/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/PlayerServiceImpl.java
index 8098836..c97e719 100644
--- a/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/PlayerServiceImpl.java
+++ b/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/PlayerServiceImpl.java
@@ -1,6 +1,7 @@
 package cz.muni.fi.pa165.icehockeymanager.services;
 
 import cz.muni.fi.pa165.icehockeymanager.dao.PlayerDao;
+import cz.muni.fi.pa165.icehockeymanager.exceptions.PlayerNotInTeamException;
 import cz.muni.fi.pa165.icehockeymanager.model.Player;
 import cz.muni.fi.pa165.icehockeymanager.model.Team;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,4 +36,19 @@ public class PlayerServiceImpl implements PlayerService {
     public Collection<Player> getFreePlayers() {
         return playerDao.getAllFreePlayers();
     }
+
+    @Override
+    public void addTeamToPlayer(Player player, Team team) {
+        player.setTeam(team);
+        playerDao.update(player);
+    }
+
+    @Override
+    public void removeTeamFromPlayer(Player player, Team team) {
+        if(!player.getTeam().equals(team)){
+            throw new PlayerNotInTeamException("Player not in this team");
+        }
+        player.setTeam(null);
+        playerDao.update(player);
+    }
 }
diff --git a/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/TeamService.java b/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/TeamService.java
index 492b6ee..bb249c8 100644
--- a/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/TeamService.java
+++ b/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/TeamService.java
@@ -26,5 +26,7 @@ public interface TeamService {
      */
     Optional<Team> getTeam(long id);
 
-    void addPlayerToTeam(Player player, Team team);
+    void addPlayerToTeam(Team team, Player player);
+
+    void removePlayerFromTeam(Team team, Player player);
 }
diff --git a/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/TeamServiceImpl.java b/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/TeamServiceImpl.java
index 797fd6e..a8c9a5d 100644
--- a/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/TeamServiceImpl.java
+++ b/src/main/java/cz/muni/fi/pa165/icehockeymanager/services/TeamServiceImpl.java
@@ -1,6 +1,7 @@
 package cz.muni.fi.pa165.icehockeymanager.services;
 
 import cz.muni.fi.pa165.icehockeymanager.dao.TeamDao;
+import cz.muni.fi.pa165.icehockeymanager.exceptions.PlayerNotInTeamException;
 import cz.muni.fi.pa165.icehockeymanager.model.Player;
 import cz.muni.fi.pa165.icehockeymanager.model.Team;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,8 +33,17 @@ public class TeamServiceImpl implements TeamService {
     }
 
     @Override
-    public void addPlayerToTeam(Player player, Team team){
+    public void addPlayerToTeam(Team team, Player player) {
         team.addPlayer(player);
         teamDao.update(team);
     }
+
+    @Override
+    public void removePlayerFromTeam(Team team, Player player) {
+        if(!team.containsPlayer(player)){
+            throw new PlayerNotInTeamException("Player not in this team");
+        }
+        team.removePlayer(player);
+        teamDao.update(team);
+    }
 }
-- 
GitLab