Skip to content

Commit 0503efd

Browse files
feat: adds implementation of MediaItemsController REST API
1 parent 55b7512 commit 0503efd

File tree

1 file changed

+59
-5
lines changed

1 file changed

+59
-5
lines changed

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

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
package com.codedifferently.lesson23.web;
22

3-
import com.codedifferently.lesson23.library.Librarian;
4-
import com.codedifferently.lesson23.library.Library;
5-
import com.codedifferently.lesson23.library.MediaItem;
6-
import com.codedifferently.lesson23.library.search.SearchCriteria;
73
import java.io.IOException;
84
import java.util.List;
95
import java.util.Set;
6+
import java.util.UUID;
7+
8+
import org.springframework.http.HttpStatus;
109
import org.springframework.http.ResponseEntity;
1110
import org.springframework.web.bind.annotation.CrossOrigin;
11+
import org.springframework.web.bind.annotation.DeleteMapping;
1212
import org.springframework.web.bind.annotation.GetMapping;
13+
import org.springframework.web.bind.annotation.PathVariable;
14+
import org.springframework.web.bind.annotation.PostMapping;
15+
import org.springframework.web.bind.annotation.RequestBody;
1316
import org.springframework.web.bind.annotation.RestController;
1417

18+
import com.codedifferently.lesson23.library.Librarian;
19+
import com.codedifferently.lesson23.library.Library;
20+
import com.codedifferently.lesson23.library.MediaItem;
21+
import com.codedifferently.lesson23.library.exceptions.MediaItemCheckedOutException;
22+
import com.codedifferently.lesson23.library.search.SearchCriteria;
23+
24+
import jakarta.validation.Valid;
25+
1526
@RestController
1627
@CrossOrigin
1728
public class MediaItemsController {
@@ -31,4 +42,47 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
3142
var response = GetMediaItemsResponse.builder().items(responseItems).build();
3243
return ResponseEntity.ok(response);
3344
}
34-
}
45+
46+
@GetMapping("/items/{id}")
47+
public ResponseEntity<MediaItemResponse> getItem(@PathVariable String id) {
48+
UUID itemId = UUID.fromString(id);
49+
Set<MediaItem> items = library.search(SearchCriteria.builder().id(itemId.toString()).build());
50+
51+
if (items.isEmpty()) {
52+
return ResponseEntity.notFound().build();
53+
}
54+
55+
MediaItem item = items.iterator().next();
56+
MediaItemResponse response = MediaItemResponse.from(item);
57+
return ResponseEntity.ok(response);
58+
}
59+
60+
@PostMapping("/items")
61+
public ResponseEntity<CreateMediaItemResponse> createItem(@Valid @RequestBody CreateMediaItemRequest request) {
62+
MediaItem mediaItem = MediaItemRequest.asMediaItem(request.getItem());
63+
library.addMediaItem(mediaItem, librarian);
64+
65+
MediaItemResponse responseItem = MediaItemResponse.from(mediaItem);
66+
CreateMediaItemResponse response = CreateMediaItemResponse.builder().item(responseItem).build();
67+
return ResponseEntity.ok(response);
68+
}
69+
70+
@DeleteMapping("/items/{id}")
71+
public ResponseEntity<Void> deleteItem(@PathVariable String id) {
72+
UUID itemId = UUID.fromString(id);
73+
74+
if (!library.hasMediaItem(itemId)) {
75+
return ResponseEntity.notFound().build();
76+
}
77+
78+
try {
79+
library.removeMediaItem(itemId, librarian);
80+
return ResponseEntity.noContent().build();
81+
} catch (MediaItemCheckedOutException e) {
82+
return ResponseEntity.status(HttpStatus.CONFLICT).build();
83+
}
84+
}
85+
86+
}
87+
88+

0 commit comments

Comments
 (0)