11package com .codedifferently .lesson26 .web ;
22
3- import com .codedifferently .lesson26 .library .Librarian ;
4- import com .codedifferently .lesson26 .library .Library ;
5- import com .codedifferently .lesson26 .library .MediaItem ;
6- import com .codedifferently .lesson26 .library .search .SearchCriteria ;
73import java .io .IOException ;
84import java .util .List ;
5+ import java .util .Optional ;
96import java .util .Set ;
7+ import java .util .UUID ;
8+
9+ import org .springframework .http .ResponseEntity ;
1010import org .springframework .web .bind .annotation .CrossOrigin ;
11+ import org .springframework .web .bind .annotation .DeleteMapping ;
1112import 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 ;
16+ import org .springframework .web .bind .annotation .RequestMapping ;
1217import org .springframework .web .bind .annotation .RestController ;
1318
19+ import com .codedifferently .lesson26 .library .Librarian ;
20+ import com .codedifferently .lesson26 .library .Library ;
21+ import com .codedifferently .lesson26 .library .MediaItem ;
22+ import com .codedifferently .lesson26 .library .search .SearchCriteria ;
23+
1424@ RestController
25+ @ RequestMapping ("/items" )
1526@ CrossOrigin
1627public class MediaItemsController {
1728 private final Library library ;
@@ -22,11 +33,51 @@ public MediaItemsController(Library library) throws IOException {
2233 this .librarian = library .getLibrarians ().stream ().findFirst ().orElseThrow ();
2334 }
2435
25- @ GetMapping ("/items" )
26- public GetMediaItemsResponse getItems () {
27- Set <MediaItem > items = library .search (SearchCriteria .builder ().build ());
36+
37+
38+ @ GetMapping ()
39+ public ResponseEntity <GetMediaItemsResponse > getItemById () {
40+ Set <MediaItem > items = library .search (SearchCriteria .builder ().build ());
2841 List <MediaItemResponse > responseItems = items .stream ().map (MediaItemResponse ::from ).toList ();
2942 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
30- return response ;
43+ return ResponseEntity .ok (response );
44+ }
45+
46+ @ GetMapping (value = "/{id}" )
47+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable ("id" ) UUID id ) {
48+
49+ System .out .println (id .toString ());
50+
51+
52+ Set <MediaItem > items = library .search (SearchCriteria .builder ().id (id .toString ()).build ());
53+
54+ Optional <MediaItem > matchedItem = items .stream ()
55+ .filter (item -> item .getId ().equals (id ))
56+ .findFirst ();
57+ System .out .println ("items" );
58+ System .out .println (items );
59+ System .out .println (matchedItem );
60+ System .out .println ("mathcedItems" );
61+ return matchedItem .map (item -> {
62+ MediaItemResponse responseItem = MediaItemResponse .from (item );
63+ return ResponseEntity .ok (responseItem );
64+ }).orElse (ResponseEntity .notFound ().build ());
65+ }
66+
67+ @ PostMapping ()
68+ public CreateMediaItemResponse postItems (@ RequestBody MediaItemRequest request ) {
69+ MediaItem newMediaItem = MediaItemRequest .asMediaItem (request );
70+
71+ library .addMediaItem (newMediaItem , librarian );
72+
73+ MediaItemResponse responseItem = MediaItemResponse .from (newMediaItem );
74+ return CreateMediaItemResponse .builder ().item (responseItem ).build ();
75+ }
76+
77+ @ DeleteMapping (value = "/{id}" )
78+ public Set <MediaItem > deleteItem (@ PathVariable ("id" ) UUID id ){
79+ library .removeMediaItem (id , librarian );
80+ Set <MediaItem > libraryAltercation = library .search (SearchCriteria .builder ().build ());
81+ return libraryAltercation ;
3182 }
3283}
0 commit comments