From 8b112dc8e34a34c81e7d857b05074d34e7617527 Mon Sep 17 00:00:00 2001
From: Paul Reichmuth
Date: Fri, 19 Dec 2025 15:40:49 +0100
Subject: [PATCH] extend endpoints
---
.../controllers/RacerRestController.java | 56 ++++++++++++++++---
1 file changed, 48 insertions(+), 8 deletions(-)
diff --git a/src/main/java/de/pnreichmuth/timekeep_backend/controllers/RacerRestController.java b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/RacerRestController.java
index 4ada52f..a176d8c 100644
--- a/src/main/java/de/pnreichmuth/timekeep_backend/controllers/RacerRestController.java
+++ b/src/main/java/de/pnreichmuth/timekeep_backend/controllers/RacerRestController.java
@@ -1,7 +1,11 @@
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.exceptions.RacerExistsException;
+import de.pnreichmuth.timekeep_backend.exceptions.TeamNotFoundException;
import de.pnreichmuth.timekeep_backend.services.RacerService;
+import de.pnreichmuth.timekeep_backend.services.TeamService;
import de.pnreichmuth.timekeep_backend.wsto.RacerWSTO;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@@ -9,10 +13,10 @@ 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.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.UUID;
@RestController
@RequestMapping("/racers")
@@ -21,6 +25,28 @@ import org.springframework.web.bind.annotation.RestController;
public class RacerRestController {
private final RacerService racerService;
+ private final TeamService teamService;
+ // ///////////////////////////////////////////////BEGIN POST MAPPINGS///////////////////////////////////////////////////
+ @PostMapping("createRacer")
+ public ResponseEntity<@NonNull RacerWSTO> createRacer(@RequestBody Racer racer) {
+ try {
+ racerService.updateRacer(racer);
+ return new ResponseEntity<>(RacerWSTO.of(racer), HttpStatus.CREATED);
+ } catch (RacerExistsException e) {
+ return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.CONFLICT,"This racer already exists")).build();
+ }
+ }
+
+ // ///////////////////////////////////////////////BEGIN GET MAPPINGS///////////////////////////////////////////////////
+ @GetMapping("")
+ public ResponseEntity<@NonNull List> getAllRacers() {
+ List dbRacers = racerService.getAllRacers();
+ if (dbRacers == null || dbRacers.isEmpty()) return ResponseEntity.of(
+ ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND, "Could not find any racers in database"))
+ .build();
+ List returnList = List.copyOf(dbRacers.stream().map(RacerWSTO::of).toList());
+ return ResponseEntity.ok(returnList);
+ }
@GetMapping("singleRacer")
public ResponseEntity<@NonNull RacerWSTO> getSingleRacers(@RequestParam Racer requestRacer){
@@ -38,9 +64,23 @@ public class RacerRestController {
return ResponseEntity.ok(RacerWSTO.of(actualRacer));
}
-// @GetMapping("byTeam")
-// public ResponseEntity<@NonNull List> getByTeam(@RequestParam Team requestTeam){
-//
-// }
+ @GetMapping("byTeam")
+ public ResponseEntity<@NonNull List> getByTeam(@RequestParam Team requestTeam){
+ UUID teamID = requestTeam.getId();
+ String teamName = requestTeam.getTeamName();
+ Team dbTeam;
+ try {
+ if (teamID != null) dbTeam = teamService.getTeam(teamID);
+ else if (teamName != null) dbTeam = teamService.getTeam(teamName);
+ else return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Must provide either id or name")).build();
+ } catch (TeamNotFoundException e) {
+ return ResponseEntity.of(ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, e.getMessage())).build();
+ }
+ List returnList = List.copyOf(dbTeam.getMembers().stream().map(RacerWSTO::of).toList());
+ return ResponseEntity.ok(returnList);
+ }
+
+ // ////////////////////////////////////////////////BEGIN DELETE MAPPINGS///////////////////////////////////////////////////
+
}