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 ;
95import java .util .Set ;
6+ import java .util .UUID ;
7+
8+ import org .springframework .http .ResponseEntity ;
109import org .springframework .web .bind .annotation .CrossOrigin ;
10+ import org .springframework .web .bind .annotation .DeleteMapping ;
1111import org .springframework .web .bind .annotation .GetMapping ;
12+ import org .springframework .web .bind .annotation .PathVariable ;
13+ import org .springframework .web .bind .annotation .PostMapping ;
14+ import org .springframework .web .bind .annotation .RequestBody ;
1215import org .springframework .web .bind .annotation .RestController ;
1316
17+ import com .codedifferently .lesson26 .library .Librarian ;
18+ import com .codedifferently .lesson26 .library .Library ;
19+ import com .codedifferently .lesson26 .library .MediaItem ;
20+ import com .codedifferently .lesson26 .library .search .SearchCriteria ;
21+
22+ import jakarta .validation .Valid ;
23+
1424@ RestController
1525@ CrossOrigin
1626public class MediaItemsController {
@@ -29,4 +39,41 @@ public GetMediaItemsResponse getItems() {
2939 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
3040 return response ;
3141 }
42+ @ GetMapping ("/items/{id}" )
43+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable ("id" ) UUID id ) {
44+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
45+
46+ Set <MediaItem > foundItem = library .search (searchCriteria );
47+
48+ if (foundItem .isEmpty ()) {
49+ return ResponseEntity .notFound ().build ();
50+ }
51+ MediaItem item = foundItem .iterator ().next ();
52+ MediaItemResponse response = MediaItemResponse .from (item );
53+
54+ return ResponseEntity .ok (response );
55+ }
56+
57+ @ DeleteMapping ("/items/{id}" )
58+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" )UUID id ) {
59+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
60+
61+ Set <MediaItem > foundItem = library .search (searchCriteria );
62+ if (foundItem .isEmpty ()) {
63+ return ResponseEntity .notFound ().build ();
64+ }
65+ MediaItem item = foundItem .iterator ().next ();
66+ library .removeMediaItem (item , librarian );
67+ return ResponseEntity .noContent ().build ();
68+ }
69+
70+ @ PostMapping ("/items" )
71+ public CreateMediaItemResponse addsItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
72+ MediaItemRequest itemRequest = request .getItem ();
73+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
74+ library .addMediaItem (item , librarian );
75+ CreateMediaItemResponse response =
76+ CreateMediaItemResponse .builder ().item (getItemById (item .getId ()).getBody ()).build ();
77+ return response ;
78+ }
3279}
0 commit comments