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 ;
5
+ import java .util .Optional ;
9
6
import java .util .Set ;
7
+ import java .util .UUID ;
8
+
9
+ import org .springframework .http .HttpStatus ;
10
10
import org .springframework .http .ResponseEntity ;
11
11
import org .springframework .web .bind .annotation .CrossOrigin ;
12
+ import org .springframework .web .bind .annotation .DeleteMapping ;
12
13
import org .springframework .web .bind .annotation .GetMapping ;
14
+ import org .springframework .web .bind .annotation .PathVariable ;
15
+ import org .springframework .web .bind .annotation .PostMapping ;
16
+ import org .springframework .web .bind .annotation .RequestBody ;
13
17
import org .springframework .web .bind .annotation .RestController ;
14
18
19
+ import com .codedifferently .lesson26 .library .Librarian ;
20
+ import com .codedifferently .lesson26 .library .Library ;
21
+ import com .codedifferently .lesson26 .library .MediaItem ;
22
+ import com .codedifferently .lesson26 .library .search .SearchCriteria ;
23
+
15
24
@ RestController
16
25
@ CrossOrigin
17
26
public class MediaItemsController {
@@ -31,4 +40,50 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
31
40
var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
32
41
return ResponseEntity .ok (response );
33
42
}
43
+ @ PostMapping ("/items" )
44
+ public ResponseEntity <MediaItemResponse > createItem (@ RequestBody MediaItemRequest request ) {
45
+ MediaItem newItem = MediaItemRequest .asMediaItem (request );
46
+
47
+ Librarian librarian =
new Librarian (
"system" ,
"[email protected] " );
48
+
49
+ library .addMediaItem (newItem , librarian );
50
+
51
+ return new ResponseEntity <>(MediaItemResponse .from (newItem ), HttpStatus .CREATED );
52
+ }
53
+
54
+ @ GetMapping ("/items/{id}" )
55
+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable UUID id ) {
56
+ Set <MediaItem > allItems = library .search (SearchCriteria .builder ().build ());
57
+
58
+ Optional <MediaItem > itemOpt = allItems .stream ()
59
+ .filter (item -> item .getId ().equals (id ))
60
+ .findFirst ();
61
+
62
+ if (itemOpt .isEmpty ()) {
63
+ return ResponseEntity .notFound ().build ();
64
+ }
65
+
66
+ MediaItemResponse response = MediaItemResponse .from (itemOpt .get ());
67
+ return ResponseEntity .ok (response );
68
+ }
69
+
70
+
71
+ @ DeleteMapping ("/items/{id}" )
72
+ public ResponseEntity <Void > deleteItemById (@ PathVariable UUID id ) {
73
+ Optional <MediaItem > itemOpt = library .search (SearchCriteria .builder ().build ())
74
+ .stream ()
75
+ .filter (item -> item .getId ().equals (id ))
76
+ .findFirst ();
77
+
78
+ if (itemOpt .isEmpty ()) {
79
+ return ResponseEntity .notFound ().build ();
80
+ }
81
+
82
+ MediaItem item = itemOpt .get ();
83
+ Librarian librarian =
new Librarian (
"system" ,
"[email protected] " );
// placeholder
84
+ library .removeMediaItem (item , librarian );
85
+
86
+ return ResponseEntity .noContent ().build (); // 204 No Content
87
+ }
88
+
34
89
}
0 commit comments