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 ;
7- import io .swagger .v3 .oas .annotations .parameters .RequestBody ;
83import java .io .IOException ;
94import java .util .List ;
10- import java .util .Map ;
115import java .util .Set ;
6+ import java .util .UUID ;
7+
128import org .springframework .http .HttpStatus ;
139import org .springframework .http .ResponseEntity ;
1410import org .springframework .web .bind .annotation .CrossOrigin ;
11+ import org .springframework .web .bind .annotation .DeleteMapping ;
1512import org .springframework .web .bind .annotation .GetMapping ;
1613import org .springframework .web .bind .annotation .PathVariable ;
1714import org .springframework .web .bind .annotation .PostMapping ;
1815import org .springframework .web .bind .annotation .RestController ;
1916
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 .exceptions .MediaItemCheckedOutException ;
21+ import com .codedifferently .lesson26 .library .search .SearchCriteria ;
22+
23+ import io .swagger .v3 .oas .annotations .parameters .RequestBody ;
24+ import jakarta .validation .Valid ;
25+
2026@ RestController
2127@ CrossOrigin
2228public class MediaItemsController {
@@ -36,10 +42,10 @@ public GetMediaItemsResponse getItems() {
3642 return response ;
3743 }
3844
39- // Get item
45+
4046 @ GetMapping ("/items/{id}" )
41- public ResponseEntity <MediaItemResponse > getItem (@ PathVariable String id ) {
42- SearchCriteria criteria = SearchCriteria .builder ().id (id ).build ();
47+ public ResponseEntity <MediaItemResponse > getItem (@ PathVariable UUID id ) {
48+ SearchCriteria criteria = SearchCriteria .builder ().id (id . toString () ).build ();
4349 Set <MediaItem > items = library .search (criteria );
4450 if (items .isEmpty ()) {
4551 return ResponseEntity .status (HttpStatus .NOT_FOUND ).build ();
@@ -50,22 +56,34 @@ public ResponseEntity<MediaItemResponse> getItem(@PathVariable String id) {
5056 }
5157 }
5258
53- // post item
5459 @ PostMapping ("/items" )
55- public ResponseEntity <?> addsItem (@ RequestBody CreateMediaItemRequest request ) {
56- if (request == null || request .getItem () == null ) {
57- return ResponseEntity .status (HttpStatus .BAD_REQUEST ).body ("Missing item in the body" );
60+
61+ public CreateMediaItemResponse addsItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
62+ MediaItemRequest itemRequest = request .getItem ();
63+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
64+ library .addMediaItem (item , librarian );
65+
66+ CreateMediaItemResponse response =
67+ CreateMediaItemResponse .builder ().item (getItem (item .getId ()).getBody ()).build ();
68+
69+ return response ;
70+ }
71+ @ DeleteMapping ("/items/{id}" )
72+ public ResponseEntity <Void > deleteItem (@ PathVariable String id ) {
73+ SearchCriteria criteria = SearchCriteria .builder ().id (id ).build ();
74+ Set <MediaItem > items = library .search (criteria );
75+
76+ if (items .isEmpty ()) {
77+ return ResponseEntity .status (HttpStatus .NOT_FOUND ).build ();
5878 }
59- try {
60- MediaItem newItem = MediaItemRequest .asMediaItem (request .getItem ());
6179
62- library . addMediaItem ( newItem , librarian );
80+ MediaItem item = items . iterator (). next ( );
6381
64- return ResponseEntity .ok (Map .of ("item" , MediaItemResponse .from (newItem )));
65- } catch (IllegalArgumentException e ) {
66- return ResponseEntity .status (HttpStatus .BAD_REQUEST ).body (e .getMessage ());
82+ try {
83+ library .removeMediaItem (item , librarian );
84+ return ResponseEntity .noContent ().build ();
85+ } catch (MediaItemCheckedOutException e ) {
86+ return ResponseEntity .status (HttpStatus .CONFLICT ).body (null );
6787 }
6888 }
69- }
70-
71- // Delete
89+ }
0 commit comments