99import java .util .Set ;
1010import java .util .UUID ;
1111import jakarta .validation .Valid ;
12+ import org .springframework .http .HttpStatus ;
1213import org .springframework .http .ResponseEntity ;
1314import org .springframework .web .bind .annotation .CrossOrigin ;
15+ import org .springframework .web .bind .annotation .DeleteMapping ;
1416import org .springframework .web .bind .annotation .GetMapping ;
1517import org .springframework .web .bind .annotation .PathVariable ;
1618import org .springframework .web .bind .annotation .PostMapping ;
1719import org .springframework .web .bind .annotation .RequestBody ;
20+ import org .springframework .web .bind .annotation .RequestMapping ;
1821import org .springframework .web .bind .annotation .RestController ;
1922
2023@ RestController
2124@ CrossOrigin
25+ @ RequestMapping
2226public 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