99import org .springframework .web .bind .annotation .DeleteMapping ;
1010import org .springframework .web .bind .annotation .GetMapping ;
1111import org .springframework .web .bind .annotation .PathVariable ;
12+ import org .springframework .web .bind .annotation .PostMapping ;
13+ import org .springframework .web .bind .annotation .RequestBody ;
1214import org .springframework .web .bind .annotation .RestController ;
1315
1416import com .codedifferently .lesson26 .library .Librarian ;
1517import com .codedifferently .lesson26 .library .Library ;
1618import com .codedifferently .lesson26 .library .MediaItem ;
1719import com .codedifferently .lesson26 .library .search .SearchCriteria ;
1820
21+ import jakarta .validation .Valid ;
22+
1923@ RestController
2024@ CrossOrigin
2125public class MediaItemsController {
@@ -28,6 +32,8 @@ public MediaItemsController(Library library) throws IOException {
2832 this .librarian = library .getLibrarians ().stream ().findFirst ().orElseThrow ();
2933 }
3034
35+ // Gets all media items.
36+
3137 @ GetMapping ("/items" )
3238 public ResponseEntity <GetMediaItemsResponse > getItems () {
3339 Set <MediaItem > items = library .search (SearchCriteria .builder ().build ());
@@ -36,17 +42,42 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
3642 return ResponseEntity .ok (response );
3743 }
3844
45+ //
46+
3947 @ DeleteMapping ("/items/{id}" )
4048 public ResponseEntity <Void > deleteItem (@ PathVariable String id ) {
4149 Set <MediaItem > items = library .search (SearchCriteria .builder ().id (id ).build ());
42-
4350 if (items .isEmpty ()) {
4451 return ResponseEntity .notFound ().build (); // Return 404 if item is not found
4552 }
46-
4753 MediaItem itemToDelete = items .iterator ().next ();
4854 library .removeMediaItem (itemToDelete , librarian ); // Assuming there's a method to remove items in the library
49-
5055 return ResponseEntity .noContent ().build (); // Return 204 No Content if deletion is successful
5156 }
57+
58+ //
59+
60+ @ GetMapping ("/items/{id}" )
61+ public ResponseEntity <MediaItemResponse > getItem (@ PathVariable String id ) {
62+ Set <MediaItem > items = library .search (SearchCriteria .builder ().id (id ).build ());
63+ if (items .isEmpty ()) {
64+ return ResponseEntity .notFound ().build (); // Return 404 if item is not found
65+ }
66+ MediaItem item = items .iterator ().next ();
67+ MediaItemResponse response = MediaItemResponse .from (item );
68+ return ResponseEntity .ok (response );
69+ }
70+
71+ //
72+
73+ @ PostMapping ("/items" )
74+ public ResponseEntity <CreateMediaItemResponse > createItem (
75+ @ Valid @ RequestBody CreateMediaItemRequest createRequest ) {
76+ MediaItemRequest itemRequest = createRequest .getItem ();
77+ MediaItem newItem = MediaItemRequest .asMediaItem (itemRequest );
78+ library .addMediaItem (newItem , this .librarian );
79+ MediaItemResponse itemResponse = MediaItemResponse .from (newItem );
80+ CreateMediaItemResponse response = CreateMediaItemResponse .builder ().item (itemResponse ).build ();
81+ return ResponseEntity .ok (response );
82+ }
5283}
0 commit comments