4
4
import com .codedifferently .lesson26 .library .Library ;
5
5
import com .codedifferently .lesson26 .library .MediaItem ;
6
6
import com .codedifferently .lesson26 .library .search .SearchCriteria ;
7
+ import jakarta .validation .Valid ;
7
8
import java .io .IOException ;
8
9
import java .util .List ;
9
10
import java .util .Set ;
11
+ import java .util .UUID ;
10
12
import org .springframework .http .ResponseEntity ;
11
13
import org .springframework .web .bind .annotation .CrossOrigin ;
14
+ import org .springframework .web .bind .annotation .DeleteMapping ;
12
15
import org .springframework .web .bind .annotation .GetMapping ;
16
+ import org .springframework .web .bind .annotation .PathVariable ;
17
+ import org .springframework .web .bind .annotation .PostMapping ;
18
+ import org .springframework .web .bind .annotation .RequestBody ;
13
19
import org .springframework .web .bind .annotation .RestController ;
14
20
15
21
@ RestController
16
22
@ CrossOrigin
17
23
public class MediaItemsController {
18
-
19
24
private final Library library ;
20
25
private final Librarian librarian ;
21
26
@@ -31,4 +36,44 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
31
36
var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
32
37
return ResponseEntity .ok (response );
33
38
}
39
+
40
+ @ GetMapping ("/items/{id}" )
41
+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable UUID id ) {
42
+ SearchCriteria criteria = SearchCriteria .builder ().id (id .toString ()).build ();
43
+ Set <MediaItem > items = library .search (criteria );
44
+
45
+ if (items .isEmpty ()) {
46
+ return ResponseEntity .notFound ().build ();
47
+ } else {
48
+ MediaItem item = items .iterator ().next ();
49
+ MediaItemResponse response = MediaItemResponse .from (item );
50
+ return ResponseEntity .ok (response );
51
+ }
52
+ }
53
+
54
+ @ PostMapping ("/items" )
55
+ public CreateMediaItemResponse addItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
56
+ MediaItemRequest itemCreation = request .getItem ();
57
+ MediaItem item = MediaItemRequest .asMediaItem (itemCreation );
58
+ library .addMediaItem (item , librarian );
59
+
60
+ CreateMediaItemResponse response =
61
+ CreateMediaItemResponse .builder ().item (getItemById (item .getId ()).getBody ()).build ();
62
+ return response ;
63
+ }
64
+
65
+ @ DeleteMapping ("/items/{id}" )
66
+ public ResponseEntity <Void > deleteItem (@ PathVariable UUID id ) {
67
+ SearchCriteria criteria = SearchCriteria .builder ().id (id .toString ()).build ();
68
+ Set <MediaItem > items = library .search (criteria );
69
+
70
+ if (items .isEmpty ()) {
71
+ return ResponseEntity .notFound ().build ();
72
+ } else {
73
+ MediaItem item = items .iterator ().next ();
74
+ library .removeMediaItem (item , librarian );
75
+
76
+ return ResponseEntity .noContent ().build ();
77
+ }
78
+ }
34
79
}
0 commit comments