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,41 @@ public GetMediaItemsResponse getItems() {
29
39
var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
30
40
return response ;
31
41
}
42
+ @ GetMapping ("/items/{id}" )
43
+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable ("id" ) UUID id ) {
44
+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
45
+
46
+ Set <MediaItem > foundItem = library .search (searchCriteria );
47
+
48
+ if (foundItem .isEmpty ()) {
49
+ return ResponseEntity .notFound ().build ();
50
+ }
51
+ MediaItem item = foundItem .iterator ().next ();
52
+ MediaItemResponse response = MediaItemResponse .from (item );
53
+
54
+ return ResponseEntity .ok (response );
55
+ }
56
+
57
+ @ DeleteMapping ("/items/{id}" )
58
+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" )UUID id ) {
59
+ SearchCriteria searchCriteria = SearchCriteria .builder ().id (id .toString ()).build ();
60
+
61
+ Set <MediaItem > foundItem = library .search (searchCriteria );
62
+ if (foundItem .isEmpty ()) {
63
+ return ResponseEntity .notFound ().build ();
64
+ }
65
+ MediaItem item = foundItem .iterator ().next ();
66
+ library .removeMediaItem (item , librarian );
67
+ return ResponseEntity .noContent ().build ();
68
+ }
69
+
70
+ @ PostMapping ("/items" )
71
+ public CreateMediaItemResponse addsItem (@ Valid @ RequestBody CreateMediaItemRequest request ) {
72
+ MediaItemRequest itemRequest = request .getItem ();
73
+ MediaItem item = MediaItemRequest .asMediaItem (itemRequest );
74
+ library .addMediaItem (item , librarian );
75
+ CreateMediaItemResponse response =
76
+ CreateMediaItemResponse .builder ().item (getItemById (item .getId ()).getBody ()).build ();
77
+ return response ;
78
+ }
32
79
}
0 commit comments