diff --git a/src/main/java/de/pnreichmuth/timekeep_backend/controllers/RacerRestController.java b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/RacerRestController.java new file mode 100644 index 0000000..0b83995 --- /dev/null +++ b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/RacerRestController.java @@ -0,0 +1,50 @@ +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.services.TeamService; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ProblemDetail; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("/racer") +@Slf4j +@RequiredArgsConstructor +public class RacerRestController { + + private final RacerService racerService; + private final TeamService teamService; + + @GetMapping("singleRacer") + public ResponseEntity getSingleRacers(@RequestParam Racer requestRacer){ + Racer actualRacer = racerService.getRacer(requestRacer.getFirstName(), requestRacer.getLastName()); + if (actualRacer == null){ + return ResponseEntity.of( + ProblemDetail.forStatusAndDetail( + HttpStatus.NOT_FOUND, + String.format("Racer with name %s %s not found", + requestRacer.getFirstName(), requestRacer.getLastName() + ) + ) + ).build(); + } + return ResponseEntity.ok(actualRacer); + } + +// @GetMapping("byTeam") +// public ResponseEntity<@NonNull List> getByTeam(@RequestParam Team requestTeam){ +// +// } +} + 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 488ce47..c10679e 100644 --- a/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamRestController.java +++ b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/TeamRestController.java @@ -1,45 +1,103 @@ package de.pnreichmuth.timekeep_backend.controllers; import de.pnreichmuth.timekeep_backend.entities.Team; +import de.pnreichmuth.timekeep_backend.exceptions.TeamExistsException; import de.pnreichmuth.timekeep_backend.exceptions.TeamNotFoundException; import de.pnreichmuth.timekeep_backend.services.TeamService; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.antlr.v4.runtime.misc.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.ProblemDetail; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.UUID; @RestController @RequestMapping("/teams") @Slf4j +@RequiredArgsConstructor public class TeamRestController { - @Autowired - TeamService teamService; + private final TeamService teamService; @PostMapping("createTeam") - @ResponseStatus(HttpStatus.CREATED) - public Team createTeam(@RequestBody Team team){ - teamService.createTeam(team); - return team; + public ResponseEntity createTeam(@RequestBody Team team){ + try { + teamService.createTeam(team); + return new ResponseEntity<>(team, HttpStatus.CREATED); + } catch (TeamExistsException e) { + return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.CONFLICT,"This team already exists")).build(); + } + } + + @PostMapping("createTeamDebug") + public ResponseEntity createTeam(){ + try { + Team team = teamService.createTeam(); + return new ResponseEntity<>(team, HttpStatus.CREATED); + } catch (TeamExistsException e) { + return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.CONFLICT,"This team already exists")).build(); + } } @GetMapping("all") - public List findAllTeams(){ - return teamService.getTeams(); + public ResponseEntity<@NonNull List> getAllTeams(){ + List teams = teamService.getTeams(); + if(teams.isEmpty()){ + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + return new ResponseEntity<>(teams, HttpStatus.OK); + } + + @GetMapping("single-team") + public ResponseEntity<@NonNull Team> getSingleTeam(@RequestBody Team reqTeam){ + UUID id = reqTeam.getId(); + String name = reqTeam.getTeamName(); + Team actualTeam; + try{ + if(id != null){ + actualTeam = teamService.getTeam(id); //prefer uuid over name, as it is the most reliable way to find a JPA object + } + else if (name != null){ + actualTeam = teamService.getTeam(name); + } + else return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Must provide either id or name")).build(); + return new ResponseEntity<>(actualTeam, HttpStatus.OK); + } + 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(); + } } @DeleteMapping("all") - @ResponseStatus(HttpStatus.NO_CONTENT) - public void deleteAllTeams(){ + public ResponseEntity< @NonNull String> deleteAllTeams(){ teamService.deleteAllTeams(); + return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.OK,"All teams deleted")).build(); } - @DeleteMapping("deleteTeam") - @ResponseStatus(HttpStatus.NO_CONTENT) - public void deleteTeam(@RequestBody Team team){ - teamService.deleteTeam(team.getTeamName()); + @DeleteMapping("single-team") + public ResponseEntity<@NonNull String> deleteTeam(@RequestBody Team team){ + String name = team.getTeamName(); + UUID id = team.getId(); + try { + if(id != null) teamService.deleteTeam(id); //prefer uuid over name + else if(name != null) teamService.deleteTeam(name); + else return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Must provide either id or name")).build(); + return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.OK,"Team deleted successfully")).build(); + } + 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.NOT_FOUND, "Team could not be found")).build(); + } } }