44import com .codedifferently .lesson16 .library .Library ;
55import com .codedifferently .lesson16 .library .MediaItem ;
66import com .codedifferently .lesson16 .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 ;
12+ import org .springframework .http .HttpStatus ;
13+ import org .springframework .http .ResponseEntity ;
14+ import org .springframework .web .bind .annotation .DeleteMapping ;
1015import 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 ;
1119import org .springframework .web .bind .annotation .RestController ;
20+ import org .springframework .web .server .ResponseStatusException ;
1221
1322@ RestController
1423public class MediaItemsController {
@@ -27,4 +36,31 @@ public GetMediaItemsResponse getItems() {
2736 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
2837 return response ;
2938 }
39+
40+ @ PostMapping ("/items" )
41+ public CreateMediaItemResponse postItem (@ Valid @ RequestBody CreateMediaItemRequest req ) {
42+ MediaItem media = MediaItemRequest .asMediaItem (req .getItem ());
43+ library .addMediaItem (media , librarian );
44+ return CreateMediaItemResponse .builder ().item (MediaItemResponse .from (media )).build ();
45+ }
46+
47+ @ GetMapping ("/items/{id}" )
48+ public GetMediaItemsResponse getMediaItem (@ PathVariable String id ) {
49+ Set <MediaItem > items = library .search (SearchCriteria .builder ().id (id ).build ());
50+ if (items .isEmpty ()) {
51+ throw new ResponseStatusException (HttpStatus .NOT_FOUND , "Media item not found" );
52+ }
53+ List <MediaItemResponse > responseItems = items .stream ().map (MediaItemResponse ::from ).toList ();
54+ var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
55+ return response ;
56+ }
57+
58+ @ DeleteMapping ("/items/{id}" )
59+ public ResponseEntity <Void > deleteMediaItem (@ PathVariable String id ) {
60+ if (!library .hasMediaItem (UUID .fromString (id ))) {
61+ throw new ResponseStatusException (HttpStatus .NOT_FOUND , "Media item not found" );
62+ }
63+ library .removeMediaItem (UUID .fromString (id ), librarian );
64+ return ResponseEntity .noContent ().build ();
65+ }
3066}
0 commit comments