From 57b994b7dda812e319b880bd9d3cca878671d5c3 Mon Sep 17 00:00:00 2001 From: Joseph Date: Sun, 24 Nov 2024 02:54:22 +0000 Subject: [PATCH 1/3] feat: modifies mediaItemsController.java to accept POST, GET, GET:ID, and DELETE:ID. Lesson_26 -JosephCaballero --- .../lesson26/web/MediaItemsController.java | 67 ++++++++++++++++--- 1 file changed, 59 insertions(+), 8 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 a393a53b9..c286ff796 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,17 +1,28 @@ 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; 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.RequestMapping; 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; + @RestController +@RequestMapping("/items") @CrossOrigin public class MediaItemsController { private final Library library; @@ -22,11 +33,51 @@ public MediaItemsController(Library library) throws IOException { this.librarian = library.getLibrarians().stream().findFirst().orElseThrow(); } - @GetMapping("/items") - public GetMediaItemsResponse getItems() { - Set items = library.search(SearchCriteria.builder().build()); + + + @GetMapping() +public ResponseEntity getItemById() { + Set items = library.search(SearchCriteria.builder().build()); List responseItems = items.stream().map(MediaItemResponse::from).toList(); var response = GetMediaItemsResponse.builder().items(responseItems).build(); - return response; + return ResponseEntity.ok(response); +} + +@GetMapping(value = "/{id}") +public ResponseEntity getItemById(@PathVariable("id") UUID id) { + + System.out.println(id.toString()); + + + Set items = library.search(SearchCriteria.builder().id(id.toString()).build()); + + Optional matchedItem = items.stream() + .filter(item -> item.getId().equals(id)) + .findFirst(); + System.out.println("items"); + System.out.println(items); + System.out.println(matchedItem); + System.out.println("mathcedItems"); + return matchedItem.map(item -> { + MediaItemResponse responseItem = MediaItemResponse.from(item); + return ResponseEntity.ok(responseItem); + }).orElse(ResponseEntity.notFound().build()); +} + + @PostMapping() + public CreateMediaItemResponse postItems(@RequestBody MediaItemRequest request) { + MediaItem newMediaItem = MediaItemRequest.asMediaItem(request); + + library.addMediaItem(newMediaItem, librarian); + + MediaItemResponse responseItem = MediaItemResponse.from(newMediaItem); + return CreateMediaItemResponse.builder().item(responseItem).build(); + } + + @DeleteMapping(value = "/{id}") + public Set deleteItem(@PathVariable("id") UUID id){ + library.removeMediaItem(id, librarian); + Set libraryAltercation = library.search(SearchCriteria.builder().build()); + return libraryAltercation; } } From c072e07ff47c4fb38bf50336f9a8e26c3fb4783f Mon Sep 17 00:00:00 2001 From: Joseph Date: Sun, 24 Nov 2024 05:25:34 +0000 Subject: [PATCH 2/3] fix: working through making the tests all pass. lesson_26 -JosephCaballero --- .../lesson26/web/MediaItemsController.java | 84 +++++++++++-------- 1 file changed, 49 insertions(+), 35 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 c286ff796..9b050dbc1 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,11 +1,15 @@ 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.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; @@ -16,11 +20,6 @@ import org.springframework.web.bind.annotation.RequestMapping; 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; - @RestController @RequestMapping("/items") @CrossOrigin @@ -33,51 +32,66 @@ public MediaItemsController(Library library) throws IOException { this.librarian = library.getLibrarians().stream().findFirst().orElseThrow(); } - - @GetMapping() -public ResponseEntity getItemById() { - Set items = library.search(SearchCriteria.builder().build()); + public ResponseEntity getItemById() { + Set items = library.search(SearchCriteria.builder().build()); + if (items.isEmpty()) { + ResponseEntity.noContent(); + } List responseItems = items.stream().map(MediaItemResponse::from).toList(); var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); -} - -@GetMapping(value = "/{id}") -public ResponseEntity getItemById(@PathVariable("id") UUID id) { - - System.out.println(id.toString()); + } + @GetMapping(value = "/{id}") + public ResponseEntity getItemById(@PathVariable("id") UUID id) { - Set items = library.search(SearchCriteria.builder().id(id.toString()).build()); + System.out.println(id.toString()); - Optional matchedItem = items.stream() - .filter(item -> item.getId().equals(id)) - .findFirst(); - System.out.println("items"); - System.out.println(items); - System.out.println(matchedItem); - System.out.println("mathcedItems"); - return matchedItem.map(item -> { - MediaItemResponse responseItem = MediaItemResponse.from(item); - return ResponseEntity.ok(responseItem); - }).orElse(ResponseEntity.notFound().build()); -} + Set items = library.search(SearchCriteria.builder().id(id.toString()).build()); + Optional matchedItem = + items.stream().filter(item -> item.getId().equals(id)).findFirst(); + System.out.println("items"); + System.out.println(items); + System.out.println(matchedItem); + System.out.println("mathcedItems"); + return matchedItem + .map( + item -> { + MediaItemResponse responseItem = MediaItemResponse.from(item); + return ResponseEntity.ok(responseItem); + }) + .orElse(ResponseEntity.notFound().build()); + } @PostMapping() - public CreateMediaItemResponse postItems(@RequestBody MediaItemRequest request) { + public ResponseEntity postItems(@RequestBody(required = true) MediaItemRequest request) { MediaItem newMediaItem = MediaItemRequest.asMediaItem(request); + if (newMediaItem.getTitle() == null + || newMediaItem.getType() == null + || request.getType() == null) { + + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(request); + } + library.addMediaItem(newMediaItem, librarian); - MediaItemResponse responseItem = MediaItemResponse.from(newMediaItem); - return CreateMediaItemResponse.builder().item(responseItem).build(); + return ResponseEntity.status(HttpStatus.CREATED).body(request); } @DeleteMapping(value = "/{id}") - public Set deleteItem(@PathVariable("id") UUID id){ + public ResponseEntity deleteItem(@PathVariable("id") UUID id) { + Set test1 = library.search(SearchCriteria.builder().id(id.toString()).build()); + + Set item = library.search(SearchCriteria.builder().id(id.toString()).build()); + if (item.isEmpty()) { + ResponseEntity.notFound().build(); + } else if (!test1.contains(item.iterator().next())) { + ResponseEntity.notFound().build(); + } library.removeMediaItem(id, librarian); - Set libraryAltercation = library.search(SearchCriteria.builder().build()); - return libraryAltercation; + // Set libraryAltercation = library.search(SearchCriteria.builder().build()); + return ResponseEntity.noContent().build(); } } From 78af86056e871c301ac31689a37a153cc8705142 Mon Sep 17 00:00:00 2001 From: Joseph Date: Sun, 24 Nov 2024 15:32:38 +0000 Subject: [PATCH 3/3] fix: makes all tests pass by changing how the POST,GET,GET:ID, and DELETE:ID methods work and catch errors. lesson_26 -JosephCaballero --- .../lesson26/web/MediaItemsController.java | 49 ++++++++++++------- 1 file changed, 32 insertions(+), 17 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 9b050dbc1..56a584e79 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 @@ -5,6 +5,7 @@ import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.search.SearchCriteria; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; @@ -65,33 +66,47 @@ public ResponseEntity getItemById(@PathVariable("id") UUID id } @PostMapping() - public ResponseEntity postItems(@RequestBody(required = true) MediaItemRequest request) { - MediaItem newMediaItem = MediaItemRequest.asMediaItem(request); - - if (newMediaItem.getTitle() == null - || newMediaItem.getType() == null - || request.getType() == null) { - - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(request); + public ResponseEntity postItems(@RequestBody CreateMediaItemRequest requestBody) { + List errorsList = new ArrayList<>(); + MediaItemRequest request = requestBody.getItem(); + if (requestBody.getItem() == null) { + errorsList.add("Cannot enter null"); + } else { + if ((request.getTitle() == null || request.getTitle().isBlank()) + && (request.getType() == null || request.getType().isBlank())) { + errorsList.add("title and type cannot be null or blank"); + } else { + if (request.getTitle() == null || request.getTitle().isBlank()) { + errorsList.add("title cannot be null or blank"); + } else { + if (request.getType() == null || request.getType().isBlank()) { + errorsList.add("type cannot be null or blank"); + } + } + } } - + if (!errorsList.isEmpty()) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body( + new Object() { + public final List errors = errorsList; + }); + } + MediaItem newMediaItem = MediaItemRequest.asMediaItem(request); library.addMediaItem(newMediaItem, librarian); - - return ResponseEntity.status(HttpStatus.CREATED).body(request); + return ResponseEntity.ok(requestBody); } @DeleteMapping(value = "/{id}") public ResponseEntity deleteItem(@PathVariable("id") UUID id) { - Set test1 = library.search(SearchCriteria.builder().id(id.toString()).build()); - + Set test1 = library.search(SearchCriteria.builder().build()); Set item = library.search(SearchCriteria.builder().id(id.toString()).build()); if (item.isEmpty()) { - ResponseEntity.notFound().build(); - } else if (!test1.contains(item.iterator().next())) { - ResponseEntity.notFound().build(); + return ResponseEntity.notFound().build(); + } else if (!test1.contains(item.iterator().next()) || item.iterator().next() == null) { + return ResponseEntity.notFound().build(); } library.removeMediaItem(id, librarian); - // Set libraryAltercation = library.search(SearchCriteria.builder().build()); return ResponseEntity.noContent().build(); } }