From 9396800850b1fc1b0c15f77608247b625a2a6592 Mon Sep 17 00:00:00 2001 From: Paul Reichmuth Date: Wed, 4 Feb 2026 20:53:02 +0100 Subject: [PATCH] added Mappings --- .../controllers/TeamMemberRestController.java | 38 +++++++++++++++++-- .../services/TeamService.java | 30 ++++++++++++++- 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamMemberRestController.java b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamMemberRestController.java index e9c14d9..b21d618 100644 --- a/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamMemberRestController.java +++ b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamMemberRestController.java @@ -2,12 +2,14 @@ package de.pnreichmuth.timekeep_backend.controllers; import de.pnreichmuth.timekeep_backend.entities.Racer; import de.pnreichmuth.timekeep_backend.entities.Team; -import de.pnreichmuth.timekeep_backend.services.RacerService; +import de.pnreichmuth.timekeep_backend.exceptions.ExistsException; +import de.pnreichmuth.timekeep_backend.exceptions.NotFoundException; import de.pnreichmuth.timekeep_backend.services.TeamService; -import de.pnreichmuth.timekeep_backend.wsto.RacerWSTO; import de.pnreichmuth.timekeep_backend.wsto.TeamWSTO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ProblemDetail; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -17,8 +19,38 @@ import org.springframework.web.bind.annotation.*; @RequiredArgsConstructor public class TeamMemberRestController { private final TeamService teamService; - private final RacerService racerService; // ///////////////////////////////////////////////BEGIN GET MAPPINGS/////////////////////////////////////////////////// // ///////////////////////////////////////////////BEGIN POST MAPPINGS/////////////////////////////////////////////////// + @PostMapping("/addMemberToTeam") + public ResponseEntity addMemberToTeam(@RequestParam("teamName") String teamName, @RequestBody Racer racer) { + Team mockTeam = new Team(); + mockTeam.setTeamName(teamName); + try{ + this.teamService.addMember(mockTeam,racer); + } + catch(NotFoundException e){ + return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND, e.getMessage())).build(); + } + catch (ExistsException e){ + return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, e.getMessage())).build(); + } + return ResponseEntity.ok(TeamWSTO.of(teamService.getTeam(mockTeam))); + } + // ///////////////////////////////////////////////BEGIN DELETE MAPPINGS/////////////////////////////////////////////////// + @DeleteMapping("/removeMemberFromTeam") + public ResponseEntity removeMemberFromTeam(@RequestParam("teamName") String teamName, @RequestBody Racer racer) { + Team mockTeam = new Team(); + mockTeam.setTeamName(teamName); + try{ + this.teamService.removeMember(mockTeam,racer); + } + catch(NotFoundException e){ + return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND, e.getMessage())).build(); + } + catch (ExistsException e){ + return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, e.getMessage())).build(); + } + return ResponseEntity.ok(TeamWSTO.of(teamService.getTeam(mockTeam))); + } } 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 c75af46..35bda01 100644 --- a/src/main/java/de/pnreichmuth/timekeep_backend/services/TeamService.java +++ b/src/main/java/de/pnreichmuth/timekeep_backend/services/TeamService.java @@ -1,9 +1,10 @@ package de.pnreichmuth.timekeep_backend.services; +import de.pnreichmuth.timekeep_backend.entities.Racer; import de.pnreichmuth.timekeep_backend.entities.Team; +import de.pnreichmuth.timekeep_backend.exceptions.RacerExistsException; import de.pnreichmuth.timekeep_backend.exceptions.TeamExistsException; import de.pnreichmuth.timekeep_backend.exceptions.TeamNotFoundException; -import de.pnreichmuth.timekeep_backend.repositories.RacerRepository; import de.pnreichmuth.timekeep_backend.repositories.TeamRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,6 +20,7 @@ import java.util.UUID; @RequiredArgsConstructor public class TeamService { private final TeamRepository teamRepository; + private final RacerService racerService; private void checkTeamIsDuplicate(Team team) throws TeamExistsException { List teams = teamRepository.findAll(); @@ -70,9 +72,33 @@ public class TeamService { public void updateTeam(Team team) throws TeamNotFoundException { Objects.requireNonNull(team, "Can't update null team."); - checkTeamIsDuplicate(team); teamRepository.save(team); } + + /** + * Adds a new member to the given team + * @param team team object to add the member to + * @param newMember + */ + public void addMember(Team team,Racer newMember){ + Team dbTeam = this.getTeam(team); + Racer dbRacer = racerService.getRacer(newMember); + if(dbTeam.getMembers().stream().anyMatch(e -> e.equals(dbRacer))){ + throw new RacerExistsException("%s %s is already a member".formatted(dbRacer.getFirstName(),dbRacer.getLastName()), newMember); + } + dbTeam.addMember(dbRacer); + this.updateTeam(dbTeam); + } + + public void removeMember(Team team, Racer newMember){ + Team dbTeam = this.getTeam(team); + Racer dbRacer = racerService.getRacer(newMember); + if(dbTeam.getMembers().stream().noneMatch(e -> e.equals(dbRacer))){ + throw new RacerExistsException("%s %s is not a member".formatted(dbRacer.getFirstName(),dbRacer.getLastName()), newMember); + } + dbTeam.removeMember(dbRacer); + this.updateTeam(dbTeam); + } /** * DANGER ZONE */