From f54ed8bac14152d167a76f8517f2b9ea1e9b7848 Mon Sep 17 00:00:00 2001 From: Kerry Ferguson Date: Mon, 6 Oct 2025 15:27:55 +0000 Subject: [PATCH 1/4] adds post, get, and delete methods for MediaItemsController file --- .../lesson23/web/MediaItemsController.java | 63 +++++++++++++++++-- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java index 7efa0b2f8..df74c8d76 100644 --- a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java +++ b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java @@ -1,17 +1,27 @@ package com.codedifferently.lesson23.web; -import com.codedifferently.lesson23.library.Librarian; -import com.codedifferently.lesson23.library.Library; -import com.codedifferently.lesson23.library.MediaItem; -import com.codedifferently.lesson23.library.search.SearchCriteria; import java.io.IOException; import java.util.List; +import java.util.Map; import java.util.Set; + 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; +import com.codedifferently.lesson23.library.Librarian; +import com.codedifferently.lesson23.library.Library; +import com.codedifferently.lesson23.library.MediaItem; +import com.codedifferently.lesson23.library.search.SearchCriteria; + +import jakarta.validation.Valid; + + @RestController @CrossOrigin public class MediaItemsController { @@ -30,5 +40,50 @@ public ResponseEntity getItems() { List responseItems = items.stream().map(MediaItemResponse::from).toList(); var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); + + } + +@GetMapping("/items/{id}") + public ResponseEntity getItemsById(@PathVariable String id) { + SearchCriteria getCriteria = SearchCriteria.builder().id(id).build(); + Set items = library.search(getCriteria); + + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } + + MediaItemResponse responseItem = MediaItemResponse.from(items.iterator().next()); + var response = GetMediaItemsResponse.builder().item(responseItem).build(); + return ResponseEntity.ok(response); + } + +@PostMapping("/items") + public ResponseEntity> addItem( + @Valid @RequestBody CreateMediaItemRequest request) { + try { + MediaItem item = MediaItemRequest.asMediaItem(request.getItem()); + library.addMediaItem(item, librarian); + MediaItemResponse responseItem = MediaItemResponse.from(item); + Map response = Map.of("item", responseItem); + + return ResponseEntity.ok(response); + } catch (IllegalArgumentException e) { + return ResponseEntity.badRequest().build(); + } + } + +@DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable String id) { + SearchCriteria deleteCriteria = SearchCriteria.builder().id(id).build(); + Set items = library.search(deleteCriteria); + + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } + + MediaItem item = items.iterator().next(); + library.removeMediaItem(item, librarian); + return ResponseEntity.noContent().build(); } + } From 950ee885b332db57a0be67fbf04e5bb5404c539f Mon Sep 17 00:00:00 2001 From: Kerry Ferguson Date: Wed, 8 Oct 2025 03:34:28 +0000 Subject: [PATCH 2/4] chore: fixes formatting using spotlessApply --- .../lesson23/web/MediaItemsController.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java index df74c8d76..c6e968ab6 100644 --- a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java +++ b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java @@ -1,10 +1,14 @@ package com.codedifferently.lesson23.web; +import com.codedifferently.lesson23.library.Librarian; +import com.codedifferently.lesson23.library.Library; +import com.codedifferently.lesson23.library.MediaItem; +import com.codedifferently.lesson23.library.search.SearchCriteria; +import jakarta.validation.Valid; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Set; - import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; @@ -14,14 +18,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import com.codedifferently.lesson23.library.Librarian; -import com.codedifferently.lesson23.library.Library; -import com.codedifferently.lesson23.library.MediaItem; -import com.codedifferently.lesson23.library.search.SearchCriteria; - -import jakarta.validation.Valid; - - @RestController @CrossOrigin public class MediaItemsController { @@ -40,10 +36,9 @@ public ResponseEntity getItems() { List responseItems = items.stream().map(MediaItemResponse::from).toList(); var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); - } -@GetMapping("/items/{id}") + @GetMapping("/items/{id}") public ResponseEntity getItemsById(@PathVariable String id) { SearchCriteria getCriteria = SearchCriteria.builder().id(id).build(); Set items = library.search(getCriteria); @@ -57,7 +52,7 @@ public ResponseEntity getItemsById(@PathVariable String i return ResponseEntity.ok(response); } -@PostMapping("/items") + @PostMapping("/items") public ResponseEntity> addItem( @Valid @RequestBody CreateMediaItemRequest request) { try { @@ -72,7 +67,7 @@ public ResponseEntity> addItem( } } -@DeleteMapping("/items/{id}") + @DeleteMapping("/items/{id}") public ResponseEntity deleteItem(@PathVariable String id) { SearchCriteria deleteCriteria = SearchCriteria.builder().id(id).build(); Set items = library.search(deleteCriteria); @@ -85,5 +80,4 @@ public ResponseEntity deleteItem(@PathVariable String id) { library.removeMediaItem(item, librarian); return ResponseEntity.noContent().build(); } - } From 9ef5eb5adb27ea09e3034875255b4051c871732d Mon Sep 17 00:00:00 2001 From: Kerry Ferguson Date: Thu, 9 Oct 2025 13:06:40 +0000 Subject: [PATCH 3/4] fix: gets rid of try/catch since Spring handles what I was trying to acomplish --- .../codedifferently/lesson23/web/MediaItemsController.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java index c6e968ab6..74db1d71f 100644 --- a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java +++ b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java @@ -55,16 +55,13 @@ public ResponseEntity getItemsById(@PathVariable String i @PostMapping("/items") public ResponseEntity> addItem( @Valid @RequestBody CreateMediaItemRequest request) { - try { MediaItem item = MediaItemRequest.asMediaItem(request.getItem()); library.addMediaItem(item, librarian); MediaItemResponse responseItem = MediaItemResponse.from(item); Map response = Map.of("item", responseItem); return ResponseEntity.ok(response); - } catch (IllegalArgumentException e) { - return ResponseEntity.badRequest().build(); - } + } @DeleteMapping("/items/{id}") From 6662620c988f49b3849ec7af1e7477c20af37c9b Mon Sep 17 00:00:00 2001 From: Kerry Ferguson Date: Thu, 9 Oct 2025 13:08:07 +0000 Subject: [PATCH 4/4] chore: ran spotlessApply again --- .../lesson23/web/MediaItemsController.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java index 74db1d71f..cfc0952eb 100644 --- a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java +++ b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java @@ -55,13 +55,12 @@ public ResponseEntity getItemsById(@PathVariable String i @PostMapping("/items") public ResponseEntity> addItem( @Valid @RequestBody CreateMediaItemRequest request) { - MediaItem item = MediaItemRequest.asMediaItem(request.getItem()); - library.addMediaItem(item, librarian); - MediaItemResponse responseItem = MediaItemResponse.from(item); - Map response = Map.of("item", responseItem); + MediaItem item = MediaItemRequest.asMediaItem(request.getItem()); + library.addMediaItem(item, librarian); + MediaItemResponse responseItem = MediaItemResponse.from(item); + Map response = Map.of("item", responseItem); - return ResponseEntity.ok(response); - + return ResponseEntity.ok(response); } @DeleteMapping("/items/{id}")