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,53 @@ public GetMediaItemsResponse getItems() {
2939 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
3040 return response ;
3141 }
42+
43+ @ GetMapping ("/items/{id}" )
44+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable ("id" ) UUID id ){
45+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
46+
47+ Set <MediaItem > foundItem = library .search (searchCriteria );
48+
49+ if (foundItem .isEmpty ()){
50+ return ResponseEntity .notFound ().build ();
51+ }
52+
53+ MediaItem item = foundItem .iterator ().next ();
54+ MediaItemResponse response = MediaItemResponse .from (item );
55+
56+ return ResponseEntity .ok (response );
57+ }
58+
59+ @ DeleteMapping ("/items/{id}" )
60+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" ) UUID id ){
61+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
62+
63+ Set <MediaItem > foundItem = library .search (searchCriteria );
64+
65+ if (foundItem .isEmpty ()){
66+ return ResponseEntity .notFound ().build ();
67+ }
68+
69+ MediaItem item = foundItem .iterator ().next ();
70+
71+ library .removeMediaItem (item , librarian );
72+
73+ return ResponseEntity .noContent ().build ();
74+ }
75+
76+
77+ @ PostMapping ("/items" )
78+ public CreateMediaItemResponse addsItem (@ Valid @ RequestBody CreateMediaItemRequest request ){
79+
80+ MediaItemRequest itemRequest = request .getItem ();
81+
82+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
83+
84+ library .addMediaItem (item , librarian );
85+
86+ CreateMediaItemResponse response = CreateMediaItemResponse .builder ().item (getItemById (item .getId ()).getBody ()).build ();
87+
88+ return response ;
89+
90+ }
3291}
0 commit comments