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,52 @@ 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 ()
46
+ .id (id .toString ())
47
+ .build ();
48
+ Set <MediaItem > foundItem = library .search (searchCriteria );
49
+
50
+ if (foundItem .isEmpty ()) {
51
+ return ResponseEntity .notFound ().build ();
52
+ }
53
+
54
+ MediaItem item = foundItem .iterator ().next ();
55
+ MediaItemResponse response = MediaItemResponse .from (item );
56
+
57
+ return ResponseEntity .ok (response );
58
+ }
59
+
60
+ @ PostMapping ("/items" )
61
+ public CreateMediaItemResponse addItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
62
+ MediaItemRequest itemRequest = request .getItem ();
63
+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
64
+ library .addMediaItem (item , librarian );
65
+
66
+ CreateMediaItemResponse response = CreateMediaItemResponse .builder ()
67
+ .item (getItemById (item .getId ()).getBody ())
68
+ .build ();
69
+ return response ;
70
+ }
71
+
72
+ @ DeleteMapping ("/items/{id}" )
73
+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" ) UUID id ) {
74
+ SearchCriteria searchCriteria = SearchCriteria .builder ()
75
+ .id (id .toString ())
76
+ .build ();
77
+
78
+ Set <MediaItem > foundItem = library .search (searchCriteria );
79
+
80
+ if (foundItem .isEmpty ()) {
81
+ return ResponseEntity .notFound ().build ();
82
+ }
83
+
84
+ MediaItem item = foundItem .iterator ().next ();
85
+ library .removeMediaItem (item , librarian );
86
+
87
+ return ResponseEntity .noContent ().build ();
88
+ }
89
+
32
90
}
0 commit comments