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 ;
5+ import java .util .Optional ;
96import java .util .Set ;
7+ import java .util .UUID ;
8+
9+ import org .springframework .http .HttpStatus ;
1010import org .springframework .http .ResponseEntity ;
1111import org .springframework .web .bind .annotation .CrossOrigin ;
12+ import org .springframework .web .bind .annotation .DeleteMapping ;
1213import org .springframework .web .bind .annotation .GetMapping ;
14+ import org .springframework .web .bind .annotation .PathVariable ;
15+ import org .springframework .web .bind .annotation .PostMapping ;
16+ import org .springframework .web .bind .annotation .RequestBody ;
1317import org .springframework .web .bind .annotation .RestController ;
1418
19+ import com .codedifferently .lesson26 .library .Librarian ;
20+ import com .codedifferently .lesson26 .library .Library ;
21+ import com .codedifferently .lesson26 .library .MediaItem ;
22+ import com .codedifferently .lesson26 .library .search .SearchCriteria ;
23+
1524@ RestController
1625@ CrossOrigin
1726public class MediaItemsController {
@@ -31,4 +40,50 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
3140 var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
3241 return ResponseEntity .ok (response );
3342 }
43+ @ PostMapping ("/items" )
44+ public ResponseEntity <MediaItemResponse > createItem (@ RequestBody MediaItemRequest request ) {
45+ MediaItem newItem = MediaItemRequest .asMediaItem (request );
46+
47+ Librarian librarian = new Librarian ("system" , "system@example.com" );
48+
49+ library .addMediaItem (newItem , librarian );
50+
51+ return new ResponseEntity <>(MediaItemResponse .from (newItem ), HttpStatus .CREATED );
52+ }
53+
54+ @ GetMapping ("/items/{id}" )
55+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable UUID id ) {
56+ Set <MediaItem > allItems = library .search (SearchCriteria .builder ().build ());
57+
58+ Optional <MediaItem > itemOpt = allItems .stream ()
59+ .filter (item -> item .getId ().equals (id ))
60+ .findFirst ();
61+
62+ if (itemOpt .isEmpty ()) {
63+ return ResponseEntity .notFound ().build ();
64+ }
65+
66+ MediaItemResponse response = MediaItemResponse .from (itemOpt .get ());
67+ return ResponseEntity .ok (response );
68+ }
69+
70+
71+ @ DeleteMapping ("/items/{id}" )
72+ public ResponseEntity <Void > deleteItemById (@ PathVariable UUID id ) {
73+ Optional <MediaItem > itemOpt = library .search (SearchCriteria .builder ().build ())
74+ .stream ()
75+ .filter (item -> item .getId ().equals (id ))
76+ .findFirst ();
77+
78+ if (itemOpt .isEmpty ()) {
79+ return ResponseEntity .notFound ().build ();
80+ }
81+
82+ MediaItem item = itemOpt .get ();
83+ Librarian librarian = new Librarian ("system" , "system@example.com" ); // placeholder
84+ library .removeMediaItem (item , librarian );
85+
86+ return ResponseEntity .noContent ().build (); // 204 No Content
87+ }
88+
3489}
0 commit comments