Skip to content

Commit 8fc6eba

Browse files
implements the MediaItemsController to enable the following API
1 parent ad5d3b8 commit 8fc6eba

File tree

1 file changed

+81
-3
lines changed

1 file changed

+81
-3
lines changed

lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,26 @@
55
import com.codedifferently.lesson26.library.MediaItem;
66
import com.codedifferently.lesson26.library.search.SearchCriteria;
77
import java.io.IOException;
8+
import java.util.ArrayList;
89
import java.util.List;
10+
import java.util.Optional;
911
import java.util.Set;
12+
import java.util.UUID;
13+
import org.springframework.http.HttpStatus;
1014
import org.springframework.http.ResponseEntity;
1115
import org.springframework.web.bind.annotation.CrossOrigin;
16+
import org.springframework.web.bind.annotation.DeleteMapping;
1217
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;
1322
import org.springframework.web.bind.annotation.RestController;
1423

1524
@RestController
25+
@RequestMapping("/items")
1626
@CrossOrigin
1727
public class MediaItemsController {
18-
1928
private final Library library;
2029
private final Librarian librarian;
2130

@@ -24,11 +33,80 @@ public MediaItemsController(Library library) throws IOException {
2433
this.librarian = library.getLibrarians().stream().findFirst().orElseThrow();
2534
}
2635

27-
@GetMapping("/items")
28-
public ResponseEntity<GetMediaItemsResponse> getItems() {
36+
@GetMapping()
37+
public ResponseEntity<GetMediaItemsResponse> getItemById() {
2938
Set<MediaItem> items = library.search(SearchCriteria.builder().build());
39+
if (items.isEmpty()) {
40+
ResponseEntity.noContent();
41+
}
3042
List<MediaItemResponse> responseItems = items.stream().map(MediaItemResponse::from).toList();
3143
var response = GetMediaItemsResponse.builder().items(responseItems).build();
3244
return ResponseEntity.ok(response);
3345
}
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+
}
34112
}

0 commit comments

Comments
 (0)