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 java .util .UUID ;
1012import org .springframework .http .ResponseEntity ;
1113import org .springframework .web .bind .annotation .CrossOrigin ;
14+ import org .springframework .web .bind .annotation .DeleteMapping ;
1215import org .springframework .web .bind .annotation .GetMapping ;
16+ import org .springframework .web .bind .annotation .PathVariable ;
17+ import org .springframework .web .bind .annotation .PostMapping ;
18+ import org .springframework .web .bind .annotation .RequestBody ;
1319import org .springframework .web .bind .annotation .RestController ;
1420
1521@ RestController
1622@ CrossOrigin
1723public class MediaItemsController {
18-
1924 private final Library library ;
2025 private final Librarian librarian ;
2126
@@ -31,4 +36,44 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
3136 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
3237 return ResponseEntity .ok (response );
3338 }
39+
40+ @ GetMapping ("/items/{id}" )
41+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable UUID id ) {
42+ SearchCriteria criteria = SearchCriteria .builder ().id (id .toString ()).build ();
43+ Set <MediaItem > items = library .search (criteria );
44+
45+ if (items .isEmpty ()) {
46+ return ResponseEntity .notFound ().build ();
47+ } else {
48+ MediaItem item = items .iterator ().next ();
49+ MediaItemResponse response = MediaItemResponse .from (item );
50+ return ResponseEntity .ok (response );
51+ }
52+ }
53+
54+ @ PostMapping ("/items" )
55+ public CreateMediaItemResponse addItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
56+ MediaItemRequest itemCreation = request .getItem ();
57+ MediaItem item = MediaItemRequest .asMediaItem (itemCreation );
58+ library .addMediaItem (item , librarian );
59+
60+ CreateMediaItemResponse response =
61+ CreateMediaItemResponse .builder ().item (getItemById (item .getId ()).getBody ()).build ();
62+ return response ;
63+ }
64+
65+ @ DeleteMapping ("/items/{id}" )
66+ public ResponseEntity <Void > deleteItem (@ PathVariable UUID id ) {
67+ SearchCriteria criteria = SearchCriteria .builder ().id (id .toString ()).build ();
68+ Set <MediaItem > items = library .search (criteria );
69+
70+ if (items .isEmpty ()) {
71+ return ResponseEntity .notFound ().build ();
72+ } else {
73+ MediaItem item = items .iterator ().next ();
74+ library .removeMediaItem (item , librarian );
75+
76+ return ResponseEntity .noContent ().build ();
77+ }
78+ }
3479}
0 commit comments