From f4d5b631a7f6ce7079b711a84920dd9ef2c26629 Mon Sep 17 00:00:00 2001
From: Matthis Bauer <mb420@hdm-stuttgart.de>
Date: Wed, 20 Dec 2023 15:57:30 +0100
Subject: [PATCH] 20.12.2023 - added TeamIDException, added removeTeam logic 
 #25 #24 #22

---
 .../controller/TournamentController.java        |  9 ++++++++-
 .../exeptions/TeamIdNotFoundException.java      |  9 +++++++++
 .../java/hdm/mi/sthbackend/model/Match.java     |  1 +
 .../sthbackend/service/TournamentService.java   | 17 ++++++++++++-----
 4 files changed, 30 insertions(+), 6 deletions(-)
 create mode 100644 sth-backend/src/main/java/hdm/mi/sthbackend/exeptions/TeamIdNotFoundException.java

diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TournamentController.java b/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TournamentController.java
index 074bd86..a6860c8 100644
--- a/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TournamentController.java
+++ b/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TournamentController.java
@@ -2,6 +2,7 @@ package hdm.mi.sthbackend.controller;
 
 
 import hdm.mi.sthbackend.exeptions.PlayerIdNotFoundException;
+import hdm.mi.sthbackend.exeptions.TeamIdNotFoundException;
 import hdm.mi.sthbackend.exeptions.TournamentIdNotFoundException;
 import hdm.mi.sthbackend.model.Player;
 import hdm.mi.sthbackend.model.Team;
@@ -36,8 +37,13 @@ public class TournamentController {
     @PostMapping("/{tournamentId}/teams")
     public Team createTeam(@PathVariable UUID tournamentId,
                            @RequestBody String teamName) throws TournamentIdNotFoundException {
-        return service.createTeam(tournamentId, teamName);
+        return service.createTeamFromTournament(tournamentId, teamName);
     }
+    @DeleteMapping("/{tournamentId}/teams/{teamId}")
+    public UUID removeTeamFromTournament(@PathVariable UUID tournamentId,
+                                         @PathVariable UUID teamId) throws TournamentIdNotFoundException, TeamIdNotFoundException{
+        return service.removeTeamFromTournament(tournamentId, teamId);
+    };
 
     @PostMapping("/{tournamentId}/teams/{teamId}/addPlayer")
     public Player addPlayerToTeam(@PathVariable UUID tournamentId,
@@ -54,6 +60,7 @@ public class TournamentController {
     }
 
 
+
     /**
      * Tournament Endpoints
      */
diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/exeptions/TeamIdNotFoundException.java b/sth-backend/src/main/java/hdm/mi/sthbackend/exeptions/TeamIdNotFoundException.java
new file mode 100644
index 0000000..2027fbf
--- /dev/null
+++ b/sth-backend/src/main/java/hdm/mi/sthbackend/exeptions/TeamIdNotFoundException.java
@@ -0,0 +1,9 @@
+package hdm.mi.sthbackend.exeptions;
+
+import java.util.UUID;
+
+public class TeamIdNotFoundException extends Exception{
+    public TeamIdNotFoundException(UUID teamId) {
+        super(String.format("TeamId %s not found", teamId.toString()));
+    }
+}
diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/model/Match.java b/sth-backend/src/main/java/hdm/mi/sthbackend/model/Match.java
index f613efe..fba9a67 100644
--- a/sth-backend/src/main/java/hdm/mi/sthbackend/model/Match.java
+++ b/sth-backend/src/main/java/hdm/mi/sthbackend/model/Match.java
@@ -24,6 +24,7 @@ public class Match {
     private UUID matchId;
     private List<TeamMatchScore> teamScores;
 
+    // todo problem mit doppelten gespeicherten daten? Eher nur UUID nutzen für winner
     @Setter
     private Team winner;
 
diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/service/TournamentService.java b/sth-backend/src/main/java/hdm/mi/sthbackend/service/TournamentService.java
index f75b546..bd33d49 100644
--- a/sth-backend/src/main/java/hdm/mi/sthbackend/service/TournamentService.java
+++ b/sth-backend/src/main/java/hdm/mi/sthbackend/service/TournamentService.java
@@ -2,6 +2,7 @@ package hdm.mi.sthbackend.service;
 
 import com.mongodb.client.MongoClient;
 import hdm.mi.sthbackend.exeptions.PlayerIdNotFoundException;
+import hdm.mi.sthbackend.exeptions.TeamIdNotFoundException;
 import hdm.mi.sthbackend.exeptions.TournamentIdNotFoundException;
 import hdm.mi.sthbackend.model.Player;
 import hdm.mi.sthbackend.model.Team;
@@ -11,10 +12,7 @@ import hdm.mi.sthbackend.repository.MongoManager;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
 
 @Service
 @AllArgsConstructor
@@ -79,7 +77,7 @@ public class TournamentService {
         return playerId;
     }
 
-    public Team createTeam(UUID tournamentId, String teamName) throws TournamentIdNotFoundException {
+    public Team createTeamFromTournament(UUID tournamentId, String teamName) throws TournamentIdNotFoundException {
         Tournament tournament = tournamentRepository.findById(tournamentId)
                 .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId));
 
@@ -93,6 +91,15 @@ public class TournamentService {
         return team;
     }
 
+    public UUID removeTeamFromTournament(UUID tournamentId, UUID teamId) throws TournamentIdNotFoundException, TeamIdNotFoundException {
+        Tournament tournament = tournamentRepository.findById(tournamentId)
+                .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId));
+
+        Optional.ofNullable(tournament.getTeams().remove(teamId)).orElseThrow(() -> new TeamIdNotFoundException(tournamentId));
+        tournamentRepository.save(tournament);
+        return teamId;
+    }
+
     public Tournament createTournament(String tournamentName) {
         MongoManager manager = new MongoManager();
         MongoClient client = manager.getMongoClient();
-- 
GitLab