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