Skip to content

Commit c633f31

Browse files
committed
feat: added implementation for addItem, deleteItem and postItem endpoints to Web Controller for lesson26 by Yemi
1 parent dbd7c3b commit c633f31

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class MediaItemRequest {
3333

3434
public static MediaItem asMediaItem(MediaItemRequest request) {
3535
var id = request.id != null ? request.id : UUID.randomUUID();
36-
switch (request.type.toUpperCase()) {
36+
switch (request.type.toLowerCase()) {
3737
case "book" -> {
3838
return new Book(id, request.title, request.isbn, List.of(request.authors), request.pages);
3939
}

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,15 @@
77
import java.io.IOException;
88
import java.util.List;
99
import java.util.Set;
10+
import java.util.UUID;
11+
import org.springframework.http.HttpStatus;
12+
import org.springframework.http.ResponseEntity;
1013
import org.springframework.web.bind.annotation.CrossOrigin;
14+
import org.springframework.web.bind.annotation.DeleteMapping;
1115
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.PathVariable;
17+
import org.springframework.web.bind.annotation.PostMapping;
18+
import org.springframework.web.bind.annotation.RequestBody;
1219
import org.springframework.web.bind.annotation.RestController;
1320

1421
@RestController
@@ -29,4 +36,46 @@ public GetMediaItemsResponse getItems() {
2936
var response = GetMediaItemsResponse.builder().items(responseItems).build();
3037
return response;
3138
}
39+
40+
@GetMapping("/items/{id}")
41+
public GetMediaItemsResponse getItem(@PathVariable UUID id) {
42+
Set<MediaItem> items = library.search(SearchCriteria.builder().build());
43+
List<MediaItemResponse> responseItem =
44+
items.stream()
45+
.map(MediaItemResponse::from) // Transform the original objects
46+
.filter(item -> item.getId().equals(id))
47+
.toList();
48+
var response = GetMediaItemsResponse.builder().items(responseItem).build();
49+
50+
return response;
51+
}
52+
53+
@DeleteMapping("/items/{id}")
54+
public ResponseEntity<Object> deleteItem(@PathVariable UUID id) {
55+
Set<MediaItem> items = library.search(SearchCriteria.builder().build());
56+
List<MediaItemResponse> itemToDelete =
57+
items.stream()
58+
.map(MediaItemResponse::from) // Transform the original objects
59+
.filter(item -> item.getId().equals(id))
60+
.toList();
61+
62+
if (!itemToDelete.isEmpty()) {
63+
library.removeMediaItem(id, librarian);
64+
return ResponseEntity.status(HttpStatus.OK).body("media item deleted successfully");
65+
}
66+
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Media deletion not successful");
67+
}
68+
69+
@PostMapping("/items")
70+
public ResponseEntity<Object> addItem(@RequestBody MediaItemRequest mediaItemRequest) {
71+
72+
MediaItem mediaItem = MediaItemRequest.asMediaItem(mediaItemRequest);
73+
library.addMediaItem(mediaItem, librarian);
74+
75+
if (null == mediaItem) {
76+
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
77+
.body("media item creation not successful");
78+
}
79+
return ResponseEntity.status(HttpStatus.CREATED).body("new media item created successfully");
80+
}
3281
}

0 commit comments

Comments
 (0)