From 87f5973a365b40dc5ba8b3cf2508ea172704bd4e Mon Sep 17 00:00:00 2001
From: Paul Reichmuth
Date: Wed, 29 Oct 2025 20:52:47 +0100
Subject: [PATCH] fix duplicate teams still being allowed
---
.../controllers/TeamRestController.java | 8 ++++---
.../timekeep_backend/entities/Team.java | 2 +-
.../services/TeamService.java | 24 +++++++++++++++----
3 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamRestController.java b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamRestController.java
index f7c4f3f..1ba8eea 100644
--- a/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamRestController.java
+++ b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamRestController.java
@@ -37,11 +37,13 @@ public class TeamRestController {
@PostMapping("createTeamDebug")
public ResponseEntity<@NonNull TeamWSTO> createTeam(){
+ Team team = teamService.createTeam();
try {
- Team team = teamService.createTeam();
team.setTeamName("DEBUG");
+ teamService.updateTeam(team);
return new ResponseEntity<>(TeamWSTO.of(team), HttpStatus.CREATED);
} catch (TeamExistsException e) {
+ teamService.deleteTeam(team.getId());
return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.CONFLICT,"This team already exists")).build();
}
}
@@ -76,8 +78,8 @@ public class TeamRestController {
}
catch(TeamNotFoundException e){
if(id != null) return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND,"Team with id "+ id +" not found")).build();
- else if (name != null) return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND,"Team with name "+ name +" not found")).build();
- else return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Must provide either id or name.")).build();
+ if (name != null) return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND,"Team with name "+ name +" not found")).build();
+ return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Must provide either id or name.")).build();
}
}
diff --git a/src/main/java/de/pnreichmuth/timekeep_backend/entities/Team.java b/src/main/java/de/pnreichmuth/timekeep_backend/entities/Team.java
index c7db604..8f162a3 100644
--- a/src/main/java/de/pnreichmuth/timekeep_backend/entities/Team.java
+++ b/src/main/java/de/pnreichmuth/timekeep_backend/entities/Team.java
@@ -28,7 +28,7 @@ public class Team {
private Map passedStations;
public Team(){
- this.teamName = "Team-" + UUID.randomUUID();
+ this.teamName = null;
this.firstSemesterTeam = true;
this.members = new HashMap<>(4);
this.passedStations = new HashMap<>();
diff --git a/src/main/java/de/pnreichmuth/timekeep_backend/services/TeamService.java b/src/main/java/de/pnreichmuth/timekeep_backend/services/TeamService.java
index 2407ec1..a11c8ff 100644
--- a/src/main/java/de/pnreichmuth/timekeep_backend/services/TeamService.java
+++ b/src/main/java/de/pnreichmuth/timekeep_backend/services/TeamService.java
@@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
@SuppressWarnings("LoggingSimilarMessage")
@@ -21,6 +22,13 @@ public class TeamService {
private final TeamRepository teamRepository;
private final RacerRepository racerRepository;
+ private void checkTeamIsDuplicate(Team team) throws TeamExistsException {
+ List teams = teamRepository.findAll();
+ if (teams.stream().anyMatch(dbTeam -> dbTeam.getTeamName().equals(team.getTeamName()) && !dbTeam.getId().equals(team.getId()))) {
+ throw new TeamExistsException("A team by this name already exists.", team);
+ }
+ }
+
public Team getTeam(UUID id){
return teamRepository.findById(id).orElse(null);
}
@@ -35,10 +43,12 @@ public class TeamService {
return teamRepository.findAll();
}
- public Team createTeam(){
+ public Team createTeam() throws TeamExistsException {
Team team = new Team();
+ team.setTeamName(String.format("Team %d", teamRepository.count() + 1));
Racer racer = new Racer(null,"Paul", "Reichmuth",false,"0");
team.addMember(racer);
+ checkTeamIsDuplicate(team);
racerRepository.save(racer);
teamRepository.save(team);
log.info("Team created: {}", team);
@@ -46,9 +56,7 @@ public class TeamService {
}
public void createTeam(Team team) throws TeamExistsException{
- if(teamRepository.existsByTeamName(team.getTeamName())){
- throw new TeamExistsException("A team by this name already exists.", team);
- }
+ checkTeamIsDuplicate(team);
teamRepository.save(team);
log.info("Team created: {}", team);
}
@@ -56,7 +64,7 @@ public class TeamService {
public void createTeam(String name) throws TeamExistsException{
Team tempTeam = new Team();
tempTeam.setTeamName(name);
- if(teamRepository.existsByTeamName(tempTeam.getTeamName())) throw new TeamExistsException("A team by this name already exists.", tempTeam);
+ checkTeamIsDuplicate(tempTeam);
teamRepository.save(tempTeam);
log.info("Team created: {}", tempTeam);
}
@@ -71,6 +79,12 @@ public class TeamService {
teamRepository.deleteTeamByTeamName(name);
}
+ public void updateTeam(Team team) throws TeamNotFoundException {
+ Objects.requireNonNull(team, "Can't update null team.");
+ checkTeamIsDuplicate(team);
+ racerRepository.saveAll(team.getMembers().values());
+ teamRepository.save(team);
+ }
/**
* DANGER ZONE
*/