From 426b05c77ae5230ec11264fde9c152bfeabb6307 Mon Sep 17 00:00:00 2001 From: jbey251 Date: Mon, 5 May 2025 13:15:21 +0000 Subject: [PATCH 1/3] chore: add @dDeleteMapping request. --- .../lesson26/web/GetMediaItemsResponse.java | 1 + .../lesson26/web/MediaItemsController.java | 26 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/GetMediaItemsResponse.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/GetMediaItemsResponse.java index 0d167cdba..ce05b28cd 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/GetMediaItemsResponse.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/GetMediaItemsResponse.java @@ -1,6 +1,7 @@ package com.codedifferently.lesson26.web; import java.util.List; + import lombok.Builder; import lombok.Data; import lombok.Singular; 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..8462a84c9 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,21 @@ 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.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.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 @CrossOrigin public class MediaItemsController { @@ -31,4 +35,18 @@ public ResponseEntity getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); // Return 404 if item is not found + } + + MediaItem itemToDelete = items.iterator().next(); + library.removeMediaItem(itemToDelete, librarian); // Assuming there's a method to remove items in the library + + return ResponseEntity.noContent().build(); // Return 204 No Content if deletion is successful + } } From 09484d134cc4388df98634aeb1936f2a84f8a23e Mon Sep 17 00:00:00 2001 From: jbey251 Date: Fri, 16 May 2025 16:20:01 +0000 Subject: [PATCH 2/3] chore: Added required API server methods along with the required imports --- .../lesson26/web/MediaItemRequest.java | 6 ++- .../lesson26/web/MediaItemsController.java | 37 +++++++++++++++++-- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java index 74552dbeb..b34aa055b 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java @@ -1,13 +1,15 @@ package com.codedifferently.lesson26.web; +import java.util.List; +import java.util.UUID; + import com.codedifferently.lesson26.library.Book; import com.codedifferently.lesson26.library.Dvd; import com.codedifferently.lesson26.library.Magazine; import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.Newspaper; + import jakarta.validation.constraints.NotBlank; -import java.util.List; -import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; 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 8462a84c9..6b1c5d661 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 @@ -9,6 +9,8 @@ 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.lesson26.library.Librarian; @@ -16,6 +18,8 @@ import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.search.SearchCriteria; +import jakarta.validation.Valid; + @RestController @CrossOrigin public class MediaItemsController { @@ -28,6 +32,8 @@ public MediaItemsController(Library library) throws IOException { this.librarian = library.getLibrarians().stream().findFirst().orElseThrow(); } + // Gets all media items. + @GetMapping("/items") public ResponseEntity getItems() { Set items = library.search(SearchCriteria.builder().build()); @@ -36,17 +42,42 @@ public ResponseEntity getItems() { return ResponseEntity.ok(response); } + // + @DeleteMapping("/items/{id}") public ResponseEntity deleteItem(@PathVariable String id) { Set items = library.search(SearchCriteria.builder().id(id).build()); - if (items.isEmpty()) { return ResponseEntity.notFound().build(); // Return 404 if item is not found } - MediaItem itemToDelete = items.iterator().next(); library.removeMediaItem(itemToDelete, librarian); // Assuming there's a method to remove items in the library - return ResponseEntity.noContent().build(); // Return 204 No Content if deletion is successful } + + // + + @GetMapping("/items/{id}") + public ResponseEntity getItem(@PathVariable String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); // Return 404 if item is not found + } + MediaItem item = items.iterator().next(); + MediaItemResponse response = MediaItemResponse.from(item); + return ResponseEntity.ok(response); + } + + // + + @PostMapping("/items") + public ResponseEntity createItem( + @Valid @RequestBody CreateMediaItemRequest createRequest) { + MediaItemRequest itemRequest = createRequest.getItem(); + MediaItem newItem = MediaItemRequest.asMediaItem(itemRequest); + library.addMediaItem(newItem, this.librarian); + MediaItemResponse itemResponse = MediaItemResponse.from(newItem); + CreateMediaItemResponse response = CreateMediaItemResponse.builder().item(itemResponse).build(); + return ResponseEntity.ok(response); + } } From 583091848b84f243b54feb9ac499376b22bd6f18 Mon Sep 17 00:00:00 2001 From: jbey251 Date: Fri, 16 May 2025 17:20:01 +0000 Subject: [PATCH 3/3] fix: Applied spotlessApply command before tests. --- .../lesson26/web/GetMediaItemsResponse.java | 1 - .../lesson26/web/MediaItemRequest.java | 6 ++--- .../lesson26/web/MediaItemsController.java | 24 +++++++++---------- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/GetMediaItemsResponse.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/GetMediaItemsResponse.java index ce05b28cd..0d167cdba 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/GetMediaItemsResponse.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/GetMediaItemsResponse.java @@ -1,7 +1,6 @@ package com.codedifferently.lesson26.web; import java.util.List; - import lombok.Builder; import lombok.Data; import lombok.Singular; diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java index b34aa055b..74552dbeb 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java @@ -1,15 +1,13 @@ package com.codedifferently.lesson26.web; -import java.util.List; -import java.util.UUID; - import com.codedifferently.lesson26.library.Book; import com.codedifferently.lesson26.library.Dvd; import com.codedifferently.lesson26.library.Magazine; import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.Newspaper; - import jakarta.validation.constraints.NotBlank; +import java.util.List; +import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; 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 6b1c5d661..84955d6f6 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,9 +1,13 @@ 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 jakarta.validation.Valid; import java.io.IOException; import java.util.List; import java.util.Set; - import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; @@ -13,13 +17,6 @@ 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 { @@ -44,15 +41,16 @@ public ResponseEntity getItems() { // - @DeleteMapping("/items/{id}") + @DeleteMapping("/items/{id}") public ResponseEntity deleteItem(@PathVariable String id) { Set items = library.search(SearchCriteria.builder().id(id).build()); if (items.isEmpty()) { - return ResponseEntity.notFound().build(); // Return 404 if item is not found + return ResponseEntity.notFound().build(); // Return 404 if item is not found } MediaItem itemToDelete = items.iterator().next(); - library.removeMediaItem(itemToDelete, librarian); // Assuming there's a method to remove items in the library - return ResponseEntity.noContent().build(); // Return 204 No Content if deletion is successful + library.removeMediaItem( + itemToDelete, librarian); // Assuming there's a method to remove items in the library + return ResponseEntity.noContent().build(); // Return 204 No Content if deletion is successful } // @@ -61,7 +59,7 @@ public ResponseEntity deleteItem(@PathVariable String id) { public ResponseEntity getItem(@PathVariable String id) { Set items = library.search(SearchCriteria.builder().id(id).build()); if (items.isEmpty()) { - return ResponseEntity.notFound().build(); // Return 404 if item is not found + return ResponseEntity.notFound().build(); // Return 404 if item is not found } MediaItem item = items.iterator().next(); MediaItemResponse response = MediaItemResponse.from(item);