5
5
import com .codedifferently .lesson26 .library .MediaItem ;
6
6
import com .codedifferently .lesson26 .library .search .SearchCriteria ;
7
7
import java .io .IOException ;
8
+ import java .util .ArrayList ;
8
9
import java .util .List ;
10
+ import java .util .Optional ;
9
11
import java .util .Set ;
12
+ import java .util .UUID ;
13
+ import org .springframework .http .HttpStatus ;
10
14
import org .springframework .http .ResponseEntity ;
11
15
import org .springframework .web .bind .annotation .CrossOrigin ;
16
+ import org .springframework .web .bind .annotation .DeleteMapping ;
12
17
import org .springframework .web .bind .annotation .GetMapping ;
18
+ import org .springframework .web .bind .annotation .PathVariable ;
19
+ import org .springframework .web .bind .annotation .PostMapping ;
20
+ import org .springframework .web .bind .annotation .RequestBody ;
21
+ import org .springframework .web .bind .annotation .RequestMapping ;
13
22
import org .springframework .web .bind .annotation .RestController ;
14
23
15
24
@ RestController
25
+ @ RequestMapping ("/items" )
16
26
@ CrossOrigin
17
27
public class MediaItemsController {
18
-
19
28
private final Library library ;
20
29
private final Librarian librarian ;
21
30
@@ -24,11 +33,80 @@ public MediaItemsController(Library library) throws IOException {
24
33
this .librarian = library .getLibrarians ().stream ().findFirst ().orElseThrow ();
25
34
}
26
35
27
- @ GetMapping ("/items" )
28
- public ResponseEntity <GetMediaItemsResponse > getItems () {
36
+ @ GetMapping ()
37
+ public ResponseEntity <GetMediaItemsResponse > getItemById () {
29
38
Set <MediaItem > items = library .search (SearchCriteria .builder ().build ());
39
+ if (items .isEmpty ()) {
40
+ ResponseEntity .noContent ();
41
+ }
30
42
List <MediaItemResponse > responseItems = items .stream ().map (MediaItemResponse ::from ).toList ();
31
43
var response = GetMediaItemsResponse .builder ().items (responseItems ).build ();
32
44
return ResponseEntity .ok (response );
33
45
}
46
+
47
+ @ GetMapping (value = "/{id}" )
48
+ public ResponseEntity <MediaItemResponse > getItemById (@ PathVariable ("id" ) UUID id ) {
49
+
50
+ System .out .println (id .toString ());
51
+
52
+ Set <MediaItem > items = library .search (SearchCriteria .builder ().id (id .toString ()).build ());
53
+ Optional <MediaItem > matchedItem =
54
+ items .stream ().filter (item -> item .getId ().equals (id )).findFirst ();
55
+ System .out .println ("items" );
56
+ System .out .println (items );
57
+ System .out .println (matchedItem );
58
+ System .out .println ("mathcedItems" );
59
+ return matchedItem
60
+ .map (
61
+ item -> {
62
+ MediaItemResponse responseItem = MediaItemResponse .from (item );
63
+ return ResponseEntity .ok (responseItem );
64
+ })
65
+ .orElse (ResponseEntity .notFound ().build ());
66
+ }
67
+
68
+ @ PostMapping ()
69
+ public ResponseEntity <?> postItems (@ RequestBody CreateMediaItemRequest requestBody ) {
70
+ List <String > errorsList = new ArrayList <>();
71
+ MediaItemRequest request = requestBody .getItem ();
72
+ if (requestBody .getItem () == null ) {
73
+ errorsList .add ("Cannot enter null" );
74
+ } else {
75
+ if ((request .getTitle () == null || request .getTitle ().isBlank ())
76
+ && (request .getType () == null || request .getType ().isBlank ())) {
77
+ errorsList .add ("title and type cannot be null or blank" );
78
+ } else {
79
+ if (request .getTitle () == null || request .getTitle ().isBlank ()) {
80
+ errorsList .add ("title cannot be null or blank" );
81
+ } else {
82
+ if (request .getType () == null || request .getType ().isBlank ()) {
83
+ errorsList .add ("type cannot be null or blank" );
84
+ }
85
+ }
86
+ }
87
+ }
88
+ if (!errorsList .isEmpty ()) {
89
+ return ResponseEntity .status (HttpStatus .BAD_REQUEST )
90
+ .body (
91
+ new Object () {
92
+ public final List <String > errors = errorsList ;
93
+ });
94
+ }
95
+ MediaItem newMediaItem = MediaItemRequest .asMediaItem (request );
96
+ library .addMediaItem (newMediaItem , librarian );
97
+ return ResponseEntity .ok (requestBody );
98
+ }
99
+
100
+ @ DeleteMapping (value = "/{id}" )
101
+ public ResponseEntity <Void > deleteItem (@ PathVariable ("id" ) UUID id ) {
102
+ Set <MediaItem > test1 = library .search (SearchCriteria .builder ().build ());
103
+ Set <MediaItem > item = library .search (SearchCriteria .builder ().id (id .toString ()).build ());
104
+ if (item .isEmpty ()) {
105
+ return ResponseEntity .notFound ().build ();
106
+ } else if (!test1 .contains (item .iterator ().next ()) || item .iterator ().next () == null ) {
107
+ return ResponseEntity .notFound ().build ();
108
+ }
109
+ library .removeMediaItem (id , librarian );
110
+ return ResponseEntity .noContent ().build ();
111
+ }
34
112
}
0 commit comments