From 93d4a66b253c7e9c0fa27d7699daa6f03c6e4f6a Mon Sep 17 00:00:00 2001 From: nilejack Date: Tue, 26 Nov 2024 08:18:51 +0000 Subject: [PATCH 1/3] Feat adds: MediaItemsController API implementation via get/items, get.items/{id}, delete items by id, and add new media item methods. --- .../lesson26/web/MediaItemRequest.java | 6 +- .../lesson26/web/MediaItemsController.java | 55 +++++++++++++++++-- 2 files changed, 55 insertions(+), 6 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 a393a53b9..03ecec427 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,16 +1,26 @@ 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 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; +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 { @@ -29,4 +39,41 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + @GetMapping("/items/{id}") + public ResponseEntity getItemById(@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(); + MediaItemResponse response = MediaItemResponse.from(item); + + return ResponseEntity.ok(response); + } + + @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(); + } + + @PostMapping("/items") + public CreateMediaItemResponse addsItem(@Valid @RequestBody CreateMediaItemRequest request) { + MediaItemRequest itemRequest = request.getItem(); + MediaItem item = MediaItemRequest.asMediaItem(itemRequest); + library.addMediaItem(item, librarian); + CreateMediaItemResponse response = + CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build(); + return response; + } } From f2b7855134bab962b80736b63f74996dbe4b52a7 Mon Sep 17 00:00:00 2001 From: nilejack Date: Tue, 26 Nov 2024 08:35:56 +0000 Subject: [PATCH 2/3] Feat fix: spotlessApply --- .../com/codedifferently/lesson26/web/MediaItemRequest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 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 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; From f2a8796c1f8fa31ad3d245b0e5d49d68db19dc89 Mon Sep 17 00:00:00 2001 From: nilejack Date: Tue, 26 Nov 2024 08:39:28 +0000 Subject: [PATCH 3/3] Feat fix: spotlessApply --- .../lesson26/web/MediaItemsController.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 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 03ecec427..a46aabe22 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,10 +1,14 @@ 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 java.util.UUID; - import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; @@ -14,13 +18,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 { @@ -39,27 +36,28 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + @GetMapping("/items/{id}") public ResponseEntity getItemById(@PathVariable("id") UUID id) { SearchCriteria searchCriteria = SearchCriteria.builder().id(id.toString()).build(); Set foundItem = library.search(searchCriteria); - if(foundItem.isEmpty()) { + if (foundItem.isEmpty()) { return ResponseEntity.notFound().build(); } MediaItem item = foundItem.iterator().next(); MediaItemResponse response = MediaItemResponse.from(item); - + return ResponseEntity.ok(response); } @DeleteMapping("/items/{id}") - public ResponseEntity deleteItem(@PathVariable("id")UUID id) { + public ResponseEntity deleteItem(@PathVariable("id") UUID id) { SearchCriteria searchCriteria = SearchCriteria.builder().id(id.toString()).build(); Set foundItem = library.search(searchCriteria); - if(foundItem.isEmpty()) { + if (foundItem.isEmpty()) { return ResponseEntity.notFound().build(); } MediaItem item = foundItem.iterator().next(); @@ -73,7 +71,7 @@ public CreateMediaItemResponse addsItem(@Valid @RequestBody CreateMediaItemReque MediaItem item = MediaItemRequest.asMediaItem(itemRequest); library.addMediaItem(item, librarian); CreateMediaItemResponse response = - CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build(); + CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build(); return response; } }