55import com .codedifferently .lesson26 .library .MediaItem ;
66import com .codedifferently .lesson26 .library .search .SearchCriteria ;
77import java .io .IOException ;
8+ import java .util .ArrayList ;
89import java .util .List ;
10+ import java .util .Optional ;
911import java .util .Set ;
12+ import java .util .UUID ;
13+ import org .springframework .http .HttpStatus ;
14+ import org .springframework .http .ResponseEntity ;
1015import org .springframework .web .bind .annotation .CrossOrigin ;
16+ import org .springframework .web .bind .annotation .DeleteMapping ;
1117import org .springframework .web .bind .annotation .GetMapping ;
18+ import org .springframework .web .bind .annotation .PathVariable ;
19+ import org .springframework .web .bind .annotation .PostMapping ;
20+ import org .springframework .web .bind .annotation .RequestBody ;
21+ import org .springframework .web .bind .annotation .RequestMapping ;
1222import org .springframework .web .bind .annotation .RestController ;
1323
1424@ RestController
25+ @ RequestMapping ("/items" )
1526@ CrossOrigin
1627public class MediaItemsController {
1728 private final Library library ;
@@ -22,11 +33,80 @@ public MediaItemsController(Library library) throws IOException {
2233 this .librarian = library .getLibrarians ().stream ().findFirst ().orElseThrow ();
2334 }
2435
25- @ GetMapping ("/items" )
26- public GetMediaItemsResponse getItems () {
36+ @ GetMapping ()
37+ public ResponseEntity < GetMediaItemsResponse > getItemById () {
2738 Set <MediaItem > items = library .search (SearchCriteria .builder ().build ());
39+ if (items .isEmpty ()) {
40+ ResponseEntity .noContent ();
41+ }
2842 List <MediaItemResponse > responseItems = items .stream ().map (MediaItemResponse ::from ).toList ();
2943 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
30- return response ;
44+ return ResponseEntity .ok (response );
45+ }
46+
47+ @ GetMapping (value = "/{id}" )
48+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable ("id" ) UUID id ) {
49+
50+ System .out .println (id .toString ());
51+
52+ Set <MediaItem > items = library .search (SearchCriteria .builder ().id (id .toString ()).build ());
53+ Optional <MediaItem > matchedItem =
54+ items .stream ().filter (item -> item .getId ().equals (id )).findFirst ();
55+ System .out .println ("items" );
56+ System .out .println (items );
57+ System .out .println (matchedItem );
58+ System .out .println ("mathcedItems" );
59+ return matchedItem
60+ .map (
61+ item -> {
62+ MediaItemResponse responseItem = MediaItemResponse .from (item );
63+ return ResponseEntity .ok (responseItem );
64+ })
65+ .orElse (ResponseEntity .notFound ().build ());
66+ }
67+
68+ @ PostMapping ()
69+ public ResponseEntity <?> postItems (@ RequestBody CreateMediaItemRequest requestBody ) {
70+ List <String > errorsList = new ArrayList <>();
71+ MediaItemRequest request = requestBody .getItem ();
72+ if (requestBody .getItem () == null ) {
73+ errorsList .add ("Cannot enter null" );
74+ } else {
75+ if ((request .getTitle () == null || request .getTitle ().isBlank ())
76+ && (request .getType () == null || request .getType ().isBlank ())) {
77+ errorsList .add ("title and type cannot be null or blank" );
78+ } else {
79+ if (request .getTitle () == null || request .getTitle ().isBlank ()) {
80+ errorsList .add ("title cannot be null or blank" );
81+ } else {
82+ if (request .getType () == null || request .getType ().isBlank ()) {
83+ errorsList .add ("type cannot be null or blank" );
84+ }
85+ }
86+ }
87+ }
88+ if (!errorsList .isEmpty ()) {
89+ return ResponseEntity .status (HttpStatus .BAD_REQUEST )
90+ .body (
91+ new Object () {
92+ public final List <String > errors = errorsList ;
93+ });
94+ }
95+ MediaItem newMediaItem = MediaItemRequest .asMediaItem (request );
96+ library .addMediaItem (newMediaItem , librarian );
97+ return ResponseEntity .ok (requestBody );
98+ }
99+
100+ @ DeleteMapping (value = "/{id}" )
101+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" ) UUID id ) {
102+ Set <MediaItem > test1 = library .search (SearchCriteria .builder ().build ());
103+ Set <MediaItem > item = library .search (SearchCriteria .builder ().id (id .toString ()).build ());
104+ if (item .isEmpty ()) {
105+ return ResponseEntity .notFound ().build ();
106+ } else if (!test1 .contains (item .iterator ().next ()) || item .iterator ().next () == null ) {
107+ return ResponseEntity .notFound ().build ();
108+ }
109+ library .removeMediaItem (id , librarian );
110+ return ResponseEntity .noContent ().build ();
31111 }
32112}
0 commit comments