diff --git a/bruno/VoD-System/Markers/Create Marker.bru b/bruno/VoD-System/Markers/Create Marker.bru index 633827b..426eee7 100644 --- a/bruno/VoD-System/Markers/Create Marker.bru +++ b/bruno/VoD-System/Markers/Create Marker.bru @@ -1,7 +1,7 @@ meta { name: Create Marker type: http - seq: 2 + seq: 3 } post { diff --git a/bruno/VoD-System/Markers/Get Marker.bru b/bruno/VoD-System/Markers/Get Marker.bru new file mode 100644 index 0000000..865af8c --- /dev/null +++ b/bruno/VoD-System/Markers/Get Marker.bru @@ -0,0 +1,16 @@ +meta { + name: Get Marker + type: http + seq: 1 +} + +get { + url: {{base_url}}/markers/5 + body: none + auth: inherit +} + +settings { + encodeUrl: true + timeout: 0 +} diff --git a/bruno/VoD-System/Markers/Get all markers.bru b/bruno/VoD-System/Markers/Get all markers.bru index c11a1a4..d26e200 100644 --- a/bruno/VoD-System/Markers/Get all markers.bru +++ b/bruno/VoD-System/Markers/Get all markers.bru @@ -1,7 +1,7 @@ meta { name: Get all markers type: http - seq: 1 + seq: 2 } get { diff --git a/src/main/java/com/ddf/vodsystem/controllers/GlobalExceptionHandler.java b/src/main/java/com/ddf/vodsystem/controllers/GlobalExceptionHandler.java index b1f9ba7..a42e2e2 100644 --- a/src/main/java/com/ddf/vodsystem/controllers/GlobalExceptionHandler.java +++ b/src/main/java/com/ddf/vodsystem/controllers/GlobalExceptionHandler.java @@ -115,4 +115,11 @@ public class GlobalExceptionHandler { APIResponse response = new APIResponse<>(ERROR, ex.getMessage(), null); return ResponseEntity.status(HttpStatus.CONFLICT).body(response); } + + @ExceptionHandler(MarkerNotFound.class) + public ResponseEntity> handleMarkerNotFound(MarkerNotFound ex) { + logger.error("MarkerNotFound: {}", ex.getMessage()); + APIResponse response = new APIResponse<>(ERROR, ex.getMessage(), null); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } } \ No newline at end of file diff --git a/src/main/java/com/ddf/vodsystem/controllers/MarkerController.java b/src/main/java/com/ddf/vodsystem/controllers/MarkerController.java index 147978d..b10d276 100644 --- a/src/main/java/com/ddf/vodsystem/controllers/MarkerController.java +++ b/src/main/java/com/ddf/vodsystem/controllers/MarkerController.java @@ -33,6 +33,15 @@ public class MarkerController { ); } + @GetMapping("/{id}") + public ResponseEntity> getMarkerById(@PathVariable Long id) { + Marker marker = markerService.getMarkerById(id); + + return ResponseEntity.ok( + new APIResponse<>(SUCCESS, "Marker retrieved successfully", convertToDTO(marker)) + ); + } + @PostMapping("") public ResponseEntity> createMarker(@Valid @RequestBody MarkerCreateRequest request) { Marker marker = markerService.create(request.message()); diff --git a/src/main/java/com/ddf/vodsystem/exceptions/MarkerNotFound.java b/src/main/java/com/ddf/vodsystem/exceptions/MarkerNotFound.java new file mode 100644 index 0000000..197c7d0 --- /dev/null +++ b/src/main/java/com/ddf/vodsystem/exceptions/MarkerNotFound.java @@ -0,0 +1,7 @@ +package com.ddf.vodsystem.exceptions; + +public class MarkerNotFound extends RuntimeException { + public MarkerNotFound(String message) { + super(message); + } +} diff --git a/src/main/java/com/ddf/vodsystem/services/MarkerService.java b/src/main/java/com/ddf/vodsystem/services/MarkerService.java index bb559b0..c23c27a 100644 --- a/src/main/java/com/ddf/vodsystem/services/MarkerService.java +++ b/src/main/java/com/ddf/vodsystem/services/MarkerService.java @@ -3,6 +3,7 @@ package com.ddf.vodsystem.services; import com.ddf.vodsystem.entities.Marker; import com.ddf.vodsystem.entities.Stream; import com.ddf.vodsystem.entities.User; +import com.ddf.vodsystem.exceptions.MarkerNotFound; import com.ddf.vodsystem.exceptions.NotAuthenticated; import com.ddf.vodsystem.exceptions.NotStreaming; import com.ddf.vodsystem.repositories.MarkerRepository; @@ -25,6 +26,21 @@ public class MarkerService { this.markerRepository = markerRepository; } + public Marker getMarkerById(Long id) { + Optional marker = markerRepository.findById(id); + + if (marker.isEmpty()) { + throw new MarkerNotFound("Marker does not exist"); + } + + Optional user = userService.getLoggedInUser(); + if (user.isEmpty() || !user.get().equals(marker.get().getUser())) { + throw new NotAuthenticated("User not authenticated for this marker"); + } + + return marker.get(); + } + public List getUserMarkers() { Optional user = userService.getLoggedInUser();