1
1
package com .codedifferently .lesson26 .web ;
2
2
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 ;
8
3
import java .io .IOException ;
9
4
import java .util .List ;
10
- import java .util .Map ;
11
5
import java .util .Set ;
6
+ import java .util .UUID ;
7
+
12
8
import org .springframework .http .HttpStatus ;
13
9
import org .springframework .http .ResponseEntity ;
14
10
import org .springframework .web .bind .annotation .CrossOrigin ;
11
+ import org .springframework .web .bind .annotation .DeleteMapping ;
15
12
import org .springframework .web .bind .annotation .GetMapping ;
16
13
import org .springframework .web .bind .annotation .PathVariable ;
17
14
import org .springframework .web .bind .annotation .PostMapping ;
18
15
import org .springframework .web .bind .annotation .RestController ;
19
16
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
+
20
26
@ RestController
21
27
@ CrossOrigin
22
28
public class MediaItemsController {
@@ -36,10 +42,10 @@ public GetMediaItemsResponse getItems() {
36
42
return response ;
37
43
}
38
44
39
- // Get item
45
+
40
46
@ 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 ();
43
49
Set <MediaItem > items = library .search (criteria );
44
50
if (items .isEmpty ()) {
45
51
return ResponseEntity .status (HttpStatus .NOT_FOUND ).build ();
@@ -50,22 +56,34 @@ public ResponseEntity<MediaItemResponse> getItem(@PathVariable String id) {
50
56
}
51
57
}
52
58
53
- // post item
54
59
@ 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 ();
58
78
}
59
- try {
60
- MediaItem newItem = MediaItemRequest .asMediaItem (request .getItem ());
61
79
62
- library . addMediaItem ( newItem , librarian );
80
+ MediaItem item = items . iterator (). next ( );
63
81
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 );
67
87
}
68
88
}
69
- }
70
-
71
- // Delete
89
+ }
0 commit comments