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+
108import org .springframework .http .ResponseEntity ;
119import org .springframework .web .bind .annotation .CrossOrigin ;
10+ import org .springframework .web .bind .annotation .DeleteMapping ;
1211import 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 ;
1315import org .springframework .web .bind .annotation .RestController ;
1416
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+
1524@ RestController
1625@ CrossOrigin
1726public class MediaItemsController {
@@ -31,4 +40,35 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
3140 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
3241 return ResponseEntity .ok (response );
3342 }
43+
44+ @ PostMapping ("/items" )
45+ public CreateMediaItemResponse postItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
46+ MediaItem item = MediaItemRequest .asMediaItem (request .getItem ());
47+ library .addMediaItem (item , librarian );
48+ return CreateMediaItemResponse .builder ().item (MediaItemResponse .from (item )).build ();
49+ }
50+
51+ @ GetMapping ("/items/{id}" )
52+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable UUID id ) {
53+ SearchCriteria criteria = SearchCriteria .builder ().id (id .toString ()).build ();
54+ Set <MediaItem > items = library .search (criteria );
55+
56+ if (!items .isEmpty ()) {
57+ MediaItem item = items .iterator ().next ();
58+ MediaItemResponse response = MediaItemResponse .from (item );
59+ return ResponseEntity .ok (response );
60+ } else {
61+ return ResponseEntity .notFound ().build ();
62+ }
63+ }
64+
65+ @ DeleteMapping ("/items/{id}" )
66+ public ResponseEntity <Void > deleteMediaItem (@ PathVariable ("id" ) UUID id ) {
67+ try {
68+ library .removeMediaItem (id , librarian );
69+ return ResponseEntity .noContent ().build ();
70+ } catch (Exception e ) {
71+ return ResponseEntity .notFound ().build ();
72+ }
73+ }
3474}
0 commit comments