Skip to content

Commit ff7ec8c

Browse files
committed
feat: implement DELETE /items/{id} endpoint
- Remove all try/catch blocks - Add @RequestMapping class-level mapping - Let Spring handle validation and error responses automatically
1 parent 2a9190f commit ff7ec8c

File tree

1 file changed

+31
-29
lines changed

1 file changed

+31
-29
lines changed

lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,20 @@
99
import java.util.Set;
1010
import java.util.UUID;
1111
import jakarta.validation.Valid;
12+
import org.springframework.http.HttpStatus;
1213
import org.springframework.http.ResponseEntity;
1314
import org.springframework.web.bind.annotation.CrossOrigin;
15+
import org.springframework.web.bind.annotation.DeleteMapping;
1416
import org.springframework.web.bind.annotation.GetMapping;
1517
import org.springframework.web.bind.annotation.PathVariable;
1618
import org.springframework.web.bind.annotation.PostMapping;
1719
import org.springframework.web.bind.annotation.RequestBody;
20+
import org.springframework.web.bind.annotation.RequestMapping;
1821
import org.springframework.web.bind.annotation.RestController;
1922

2023
@RestController
2124
@CrossOrigin
25+
@RequestMapping
2226
public class MediaItemsController {
2327

2428
private final Library library;
@@ -30,45 +34,43 @@ public MediaItemsController(Library library) throws IOException {
3034
}
3135

3236
@GetMapping("/items")
33-
public ResponseEntity<GetMediaItemsResponse> getItems() {
37+
public GetMediaItemsResponse getItems() {
3438
Set<MediaItem> items = library.search(SearchCriteria.builder().build());
3539
List<MediaItemResponse> responseItems = items.stream().map(MediaItemResponse::from).toList();
36-
var response = GetMediaItemsResponse.builder().items(responseItems).build();
37-
return ResponseEntity.ok(response);
40+
return GetMediaItemsResponse.builder().items(responseItems).build();
3841
}
3942

4043
@GetMapping("/items/{id}")
4144
public ResponseEntity<MediaItemResponse> getItem(@PathVariable String id) {
42-
try {
43-
UUID itemId = UUID.fromString(id);
44-
Set<MediaItem> items = library.search(SearchCriteria.builder().id(itemId.toString()).build());
45-
46-
if (items.isEmpty()) {
47-
return ResponseEntity.notFound().build();
48-
}
49-
50-
MediaItem item = items.iterator().next();
51-
MediaItemResponse response = MediaItemResponse.from(item);
52-
return ResponseEntity.ok(response);
53-
} catch (IllegalArgumentException e) {
54-
return ResponseEntity.badRequest().build();
45+
UUID itemId = UUID.fromString(id);
46+
Set<MediaItem> items = library.search(SearchCriteria.builder().id(itemId.toString()).build());
47+
48+
if (items.isEmpty()) {
49+
return ResponseEntity.notFound().build();
5550
}
51+
52+
MediaItem item = items.iterator().next();
53+
return ResponseEntity.ok(MediaItemResponse.from(item));
5654
}
5755

5856
@PostMapping("/items")
59-
public ResponseEntity<CreateMediaItemResponse> createItem(@Valid @RequestBody CreateMediaItemRequest request) {
60-
try {
61-
MediaItem newItem = MediaItemRequest.asMediaItem(request.getItem());
62-
library.addMediaItem(newItem, librarian);
63-
64-
MediaItemResponse itemResponse = MediaItemResponse.from(newItem);
65-
CreateMediaItemResponse response = CreateMediaItemResponse.builder()
66-
.item(itemResponse)
67-
.build();
68-
69-
return ResponseEntity.ok(response);
70-
} catch (Exception e) {
71-
return ResponseEntity.badRequest().build();
57+
public CreateMediaItemResponse createItem(@Valid @RequestBody CreateMediaItemRequest request) {
58+
MediaItem newItem = MediaItemRequest.asMediaItem(request.getItem());
59+
library.addMediaItem(newItem, librarian);
60+
61+
MediaItemResponse itemResponse = MediaItemResponse.from(newItem);
62+
return CreateMediaItemResponse.builder().item(itemResponse).build();
63+
}
64+
65+
@DeleteMapping("/items/{id}")
66+
public ResponseEntity<Void> deleteItem(@PathVariable String id) {
67+
UUID itemId = UUID.fromString(id);
68+
69+
if (!library.hasMediaItem(itemId)) {
70+
return ResponseEntity.notFound().build();
7271
}
72+
73+
library.removeMediaItem(itemId, librarian);
74+
return ResponseEntity.noContent().build();
7375
}
7476
}

0 commit comments

Comments
 (0)