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 ;
1214import org .springframework .web .bind .annotation .RestController ;
1315
16+ import com .codedifferently .lesson26 .library .Librarian ;
17+ import com .codedifferently .lesson26 .library .Library ;
18+ import com .codedifferently .lesson26 .library .MediaItem ;
19+ import com .codedifferently .lesson26 .library .search .SearchCriteria ;
20+
21+ import io .swagger .v3 .oas .annotations .parameters .RequestBody ;
22+ import jakarta .validation .Valid ;
23+
24+
1425@ RestController
1526@ CrossOrigin
1627public class MediaItemsController {
@@ -26,7 +37,49 @@ public MediaItemsController(Library library) throws IOException {
2637 public GetMediaItemsResponse getItems () {
2738 Set <MediaItem > items = library .search (SearchCriteria .builder ().build ());
2839 List <MediaItemResponse > responseItems = items .stream ().map (MediaItemResponse ::from ).toList ();
40+
2941 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
3042 return response ;
3143 }
44+
45+ @ GetMapping ("/items/{id}" )
46+ public ResponseEntity <MediaItemResponse > getItem (@ PathVariable ("id" ) UUID id ) {
47+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
48+
49+ Set <MediaItem > foundItem = library .search (searchCriteria );
50+
51+ if (foundItem .isEmpty ()) {
52+ return ResponseEntity .notFound ().build ();
53+ }
54+
55+ MediaItem item = foundItem .iterator ().next ();
56+ MediaItemResponse response = MediaItemResponse .from (item );
57+
58+ return ResponseEntity .ok (response );
59+ }
60+
61+ @ DeleteMapping ("/items/{id}" )
62+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" ) UUID id ) {
63+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
64+
65+ Set <MediaItem > foundItem = library .search (searchCriteria );
66+
67+ if (foundItem .isEmpty ()) {
68+ return ResponseEntity .notFound ().build ();
69+ }
70+
71+ MediaItem item = foundItem .iterator ().next ();
72+ library .removeMediaItem (item , librarian );
73+ return ResponseEntity .noContent ().build ();
74+ }
75+
76+ @ PostMapping ("/items" )
77+ public CreateMediaItemResponse addsItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
78+ MediaItemRequest itemRequest = request .getItem ();
79+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
80+ library .addMediaItem (item , librarian );
81+
82+ CreateMediaItemResponse res = CreateMediaItemResponse .builder ().item (getItem (item .getId ()).getBody ()).build ();
83+ return res ;
84+ }
3285}
0 commit comments