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
3
import java .io .IOException ;
8
4
import java .util .List ;
9
5
import java .util .Set ;
6
+ import java .util .UUID ;
7
+
8
+ import org .springframework .http .ResponseEntity ;
10
9
import org .springframework .web .bind .annotation .CrossOrigin ;
10
+ import org .springframework .web .bind .annotation .DeleteMapping ;
11
11
import 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 ;
12
15
import org .springframework .web .bind .annotation .RestController ;
13
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 .search .SearchCriteria ;
21
+
22
+ import jakarta .validation .Valid ;
23
+
14
24
@ RestController
15
25
@ CrossOrigin
16
26
public class MediaItemsController {
@@ -29,4 +39,53 @@ public GetMediaItemsResponse getItems() {
29
39
var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
30
40
return response ;
31
41
}
42
+
43
+ @ GetMapping ("/items/{id}" )
44
+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable ("id" ) UUID id ){
45
+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
46
+
47
+ Set <MediaItem > foundItem = library .search (searchCriteria );
48
+
49
+ if (foundItem .isEmpty ()){
50
+ return ResponseEntity .notFound ().build ();
51
+ }
52
+
53
+ MediaItem item = foundItem .iterator ().next ();
54
+ MediaItemResponse response = MediaItemResponse .from (item );
55
+
56
+ return ResponseEntity .ok (response );
57
+ }
58
+
59
+ @ DeleteMapping ("/items/{id}" )
60
+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" ) UUID id ){
61
+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
62
+
63
+ Set <MediaItem > foundItem = library .search (searchCriteria );
64
+
65
+ if (foundItem .isEmpty ()){
66
+ return ResponseEntity .notFound ().build ();
67
+ }
68
+
69
+ MediaItem item = foundItem .iterator ().next ();
70
+
71
+ library .removeMediaItem (item , librarian );
72
+
73
+ return ResponseEntity .noContent ().build ();
74
+ }
75
+
76
+
77
+ @ PostMapping ("/items" )
78
+ public CreateMediaItemResponse addsItem (@ Valid @ RequestBody CreateMediaItemRequest request ){
79
+
80
+ MediaItemRequest itemRequest = request .getItem ();
81
+
82
+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
83
+
84
+ library .addMediaItem (item , librarian );
85
+
86
+ CreateMediaItemResponse response = CreateMediaItemResponse .builder ().item (getItemById (item .getId ()).getBody ()).build ();
87
+
88
+ return response ;
89
+
90
+ }
32
91
}
0 commit comments