44import com .codedifferently .lesson26 .library .Library ;
55import com .codedifferently .lesson26 .library .MediaItem ;
66import com .codedifferently .lesson26 .library .search .SearchCriteria ;
7+ import jakarta .validation .Valid ;
78import java .io .IOException ;
89import java .util .List ;
910import java .util .Set ;
11+ import org .springframework .http .ResponseEntity ;
1012import org .springframework .web .bind .annotation .CrossOrigin ;
1113import org .springframework .web .bind .annotation .DeleteMapping ;
1214import org .springframework .web .bind .annotation .GetMapping ;
1315import org .springframework .web .bind .annotation .PathVariable ;
16+ import org .springframework .web .bind .annotation .PostMapping ;
17+ import org .springframework .web .bind .annotation .RequestBody ;
1418import org .springframework .web .bind .annotation .RestController ;
1519
1620@ RestController
@@ -32,24 +36,33 @@ public GetMediaItemsResponse getItems() {
3236 return response ;
3337 }
3438
35- @ GetMapping ("/items" )
36- public GetMediaItemsResponse postItems () {
37- Set <MediaItem > items = library .search (SearchCriteria .builder ().build ());
38- List <MediaItemResponse > responseItems = items .stream ().map (MediaItemResponse ::from ).toList ();
39- return postItems ();
39+ @ PostMapping ("/items" )
40+ public ResponseEntity <?> postItems (@ Valid @ RequestBody CreateMediaItemRequest request ) {
41+ MediaItemRequest itemRequest = request .getItem ();
42+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
43+ library .addMediaItem (item , librarian );
44+ MediaItemResponse response = MediaItemResponse .from (item );
45+ return ResponseEntity .ok (CreateMediaItemResponse .builder ().item (response ).build ());
4046 }
4147
42- @ GetMapping ("/items/:id " )
43- public GetMediaItemsResponse getItemsId (@ PathVariable String id ) {
48+ @ GetMapping ("/items/{id} " )
49+ public ResponseEntity < GetMediaItemsResponse > getItemsId (@ PathVariable String id ) {
4450 Set <MediaItem > items = library .search (SearchCriteria .builder ().id (id ).build ());
51+ if (items .isEmpty ()) {
52+ return ResponseEntity .notFound ().build ();
53+ }
4554 MediaItemResponse responseItem = items .stream ().map (MediaItemResponse ::from ).iterator ().next ();
46- return GetMediaItemsResponse .builder ().item (responseItem ).build ();
55+ return ResponseEntity . ok ( GetMediaItemsResponse .builder ().item (responseItem ).build () );
4756 }
4857
49- @ DeleteMapping (value = " {id}" )
50- public void deletebById (@ PathVariable String id ) {
58+ @ DeleteMapping ("/items/ {id}" )
59+ public ResponseEntity <?> deletebById (@ PathVariable String id ) {
5160 Set <MediaItem > items = library .search (SearchCriteria .builder ().id (id ).build ());
5261 MediaItem item = items .iterator ().next ();
62+ if (items .isEmpty () || item == null ) {
63+ ResponseEntity .notFound ().build ();
64+ }
5365 library .removeMediaItem (item , librarian );
66+ return ResponseEntity .noContent ().build ();
5467 }
5568}
0 commit comments