diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java index bbbc45e41..ea5c0c1e3 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java @@ -7,9 +7,14 @@ import java.io.IOException; import java.util.List; import java.util.Set; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController @@ -27,8 +32,43 @@ public MediaItemsController(Library library) throws IOException { @GetMapping("/items") public ResponseEntity getItems() { Set items = library.search(SearchCriteria.builder().build()); + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } List responseItems = items.stream().map(MediaItemResponse::from).toList(); var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); } + + @GetMapping("/items/{id}") + public ResponseEntity getItem(@PathVariable("id") String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } + MediaItemResponse responseItem = MediaItemResponse.from(items.iterator().next()); + GetMediaItemsResponse response = GetMediaItemsResponse.builder().item(responseItem).build(); + return ResponseEntity.ok(response); + } + + @PostMapping("/items") + public ResponseEntity postItem(@RequestBody CreateMediaItemRequest request) { + MediaItemRequest item = request.getItem(); + MediaItem response = MediaItemRequest.asMediaItem(item); + MediaItemResponse itemResponse = MediaItemResponse.from(response); + CreateMediaItemResponse createItemResponse = + CreateMediaItemResponse.builder().item(itemResponse).build(); + MediaItemResponse createdItem = createItemResponse.getItem(); + return ResponseEntity.status(HttpStatus.CREATED).body(createdItem); + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable("id") String id) { + Set item = library.search(SearchCriteria.builder().id(id).build()); + if (item.isEmpty()) { + return ResponseEntity.notFound().build(); + } + library.removeMediaItem(item.iterator().next(), librarian); + return ResponseEntity.noContent().build(); + } }