From b1b236e0358c7b780b8b33f3088bb5fa682014e5 Mon Sep 17 00:00:00 2001 From: angie-3 Date: Mon, 2 Dec 2024 12:46:08 +0000 Subject: [PATCH 1/2] feat:Lesson 26 Get/Post/Delete Methods added/AngelicaC --- .../lesson26/web/MediaItemsController.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) 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 a393a53b9..21e13f793 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,8 +7,14 @@ import java.io.IOException; import java.util.List; import java.util.Set; +import java.util.UUID; +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 @@ -29,4 +35,33 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + + @GetMapping("/items/{id}") + public MediaItemResponse getItemById(@PathVariable("id") String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + MediaItemResponse response = + items.stream().map(MediaItemResponse::from).findFirst().orElseThrow(); + return response; + } + + @PostMapping("/items") + public CreateMediaItemResponse postItems(@RequestBody CreateMediaItemRequest requestItem) { + MediaItemRequest itemMediaItemRequest = requestItem.getItem(); + MediaItem item = MediaItemRequest.asMediaItem(itemMediaItemRequest); + library.addMediaItem(item, librarian); + MediaItemResponse itemResponse = MediaItemResponse.from(item); + return CreateMediaItemResponse.builder().item(itemResponse).build(); + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable("id") UUID id) { + SearchCriteria searchCriteria = SearchCriteria.builder().id(id.toString()).build(); + Set foundItem = library.search(searchCriteria); + if (foundItem.isEmpty()) { + return ResponseEntity.notFound().build(); + } + MediaItem item = foundItem.iterator().next(); + library.removeMediaItem(item, librarian); + return ResponseEntity.noContent().build(); + } } From 9e4c03096673f5252d75bfd562809aeecc395d19 Mon Sep 17 00:00:00 2001 From: angie-3 Date: Mon, 2 Dec 2024 15:45:48 +0000 Subject: [PATCH 2/2] fix: made changes to code to pass the failed test. --- .../lesson26/web/MediaItemsController.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) 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 21e13f793..a4de47c16 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 @@ -1,13 +1,11 @@ package com.codedifferently.lesson26.web; -import com.codedifferently.lesson26.library.Librarian; -import com.codedifferently.lesson26.library.Library; -import com.codedifferently.lesson26.library.MediaItem; -import com.codedifferently.lesson26.library.search.SearchCriteria; import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.UUID; + import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; @@ -17,6 +15,13 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import com.codedifferently.lesson26.library.Librarian; +import com.codedifferently.lesson26.library.Library; +import com.codedifferently.lesson26.library.MediaItem; +import com.codedifferently.lesson26.library.search.SearchCriteria; + +import jakarta.validation.Valid; + @RestController @CrossOrigin public class MediaItemsController { @@ -37,15 +42,20 @@ public GetMediaItemsResponse getItems() { } @GetMapping("/items/{id}") - public MediaItemResponse getItemById(@PathVariable("id") String id) { + public ResponseEntity getItemById(@PathVariable("id") String id) { Set items = library.search(SearchCriteria.builder().id(id).build()); - MediaItemResponse response = - items.stream().map(MediaItemResponse::from).findFirst().orElseThrow(); - return response; + Optional response = + items.stream().map(MediaItemResponse::from).findFirst(); + + if (response.isPresent()){ + return ResponseEntity.ok(response.get()); + } + + return ResponseEntity.notFound().build(); } @PostMapping("/items") - public CreateMediaItemResponse postItems(@RequestBody CreateMediaItemRequest requestItem) { + public CreateMediaItemResponse postItems(@Valid @RequestBody CreateMediaItemRequest requestItem) { MediaItemRequest itemMediaItemRequest = requestItem.getItem(); MediaItem item = MediaItemRequest.asMediaItem(itemMediaItemRequest); library.addMediaItem(item, librarian);