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 ;
12
14
import org .springframework .web .bind .annotation .RestController ;
13
15
16
+ import com .codedifferently .lesson26 .library .Librarian ;
17
+ import com .codedifferently .lesson26 .library .Library ;
18
+ import com .codedifferently .lesson26 .library .MediaItem ;
19
+ import com .codedifferently .lesson26 .library .search .SearchCriteria ;
20
+
21
+ import io .swagger .v3 .oas .annotations .parameters .RequestBody ;
22
+ import jakarta .validation .Valid ;
23
+
24
+
14
25
@ RestController
15
26
@ CrossOrigin
16
27
public class MediaItemsController {
@@ -26,7 +37,49 @@ public MediaItemsController(Library library) throws IOException {
26
37
public GetMediaItemsResponse getItems () {
27
38
Set <MediaItem > items = library .search (SearchCriteria .builder ().build ());
28
39
List <MediaItemResponse > responseItems = items .stream ().map (MediaItemResponse ::from ).toList ();
40
+
29
41
var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
30
42
return response ;
31
43
}
44
+
45
+ @ GetMapping ("/items/{id}" )
46
+ public ResponseEntity <MediaItemResponse > getItem (@ PathVariable ("id" ) UUID id ) {
47
+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
48
+
49
+ Set <MediaItem > foundItem = library .search (searchCriteria );
50
+
51
+ if (foundItem .isEmpty ()) {
52
+ return ResponseEntity .notFound ().build ();
53
+ }
54
+
55
+ MediaItem item = foundItem .iterator ().next ();
56
+ MediaItemResponse response = MediaItemResponse .from (item );
57
+
58
+ return ResponseEntity .ok (response );
59
+ }
60
+
61
+ @ DeleteMapping ("/items/{id}" )
62
+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" ) UUID id ) {
63
+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
64
+
65
+ Set <MediaItem > foundItem = library .search (searchCriteria );
66
+
67
+ if (foundItem .isEmpty ()) {
68
+ return ResponseEntity .notFound ().build ();
69
+ }
70
+
71
+ MediaItem item = foundItem .iterator ().next ();
72
+ library .removeMediaItem (item , librarian );
73
+ return ResponseEntity .noContent ().build ();
74
+ }
75
+
76
+ @ PostMapping ("/items" )
77
+ public CreateMediaItemResponse addsItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
78
+ MediaItemRequest itemRequest = request .getItem ();
79
+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
80
+ library .addMediaItem (item , librarian );
81
+
82
+ CreateMediaItemResponse res = CreateMediaItemResponse .builder ().item (getItem (item .getId ()).getBody ()).build ();
83
+ return res ;
84
+ }
32
85
}
0 commit comments