From 918a03abcf7b4f0e39a3be3d63dbd59f6337594c Mon Sep 17 00:00:00 2001 From: Dylan Date: Mon, 5 May 2025 15:10:13 +0000 Subject: [PATCH 1/4] feat: adds getters for getting a book by id, deleting a book by id and creating a new book. --- .../lesson26/web/MediaItemsController.java | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) 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..386f091f8 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 @@ -4,18 +4,23 @@ 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; 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 @CrossOrigin public class MediaItemsController { - private final Library library; private final Librarian librarian; @@ -31,4 +36,44 @@ public ResponseEntity getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); } + + @GetMapping("/items/{id}") + public ResponseEntity getItemById(@PathVariable UUID id) { + SearchCriteria criteria = SearchCriteria.builder().id(id.toString()).build(); + Set items = library.search(criteria); + + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } else { + MediaItem item = items.iterator().next(); + MediaItemResponse response = MediaItemResponse.from(item); + return ResponseEntity.ok(response); + } + } + + @PostMapping("/items") + public CreateMediaItemResponse addItem(@Valid @RequestBody CreateMediaItemRequest request) { + MediaItemRequest itemCreation = request.getItem(); + MediaItem item = MediaItemRequest.asMediaItem(itemCreation); + library.addMediaItem(item, librarian); + + CreateMediaItemResponse response = + CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build(); + return response; + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable UUID id) { + SearchCriteria criteria = SearchCriteria.builder().id(id.toString()).build(); + Set items = library.search(criteria); + + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } else { + MediaItem item = items.iterator().next(); + library.removeMediaItem(item, librarian); + + return ResponseEntity.noContent().build(); + } + } } From e2d7e4147a9a00d28f645f9069a99a8f56c927b8 Mon Sep 17 00:00:00 2001 From: Vicente Vigueras <161079929+VicenteVigueras@users.noreply.github.com> Date: Mon, 5 May 2025 11:42:42 -0400 Subject: [PATCH 2/4] fix: lombok dependency update (#600) * fix: lombok dependency update * chore: formatting (indent) --- lesson_26/api/java/api_app/build.gradle.kts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lesson_26/api/java/api_app/build.gradle.kts b/lesson_26/api/java/api_app/build.gradle.kts index ac0c0e680..a282111f8 100644 --- a/lesson_26/api/java/api_app/build.gradle.kts +++ b/lesson_26/api/java/api_app/build.gradle.kts @@ -5,7 +5,6 @@ plugins { id("com.diffplug.spotless") version "6.25.0" id("org.springframework.boot") version "3.4.0" id("com.adarshr.test-logger") version "4.0.0" - id("io.freefair.lombok") version "8.6" } apply(plugin = "io.spring.dependency-management") @@ -39,6 +38,10 @@ dependencies { implementation("org.apache.commons:commons-csv:1.10.0") implementation("org.xerial:sqlite-jdbc:3.36.0") implementation("org.hibernate.orm:hibernate-community-dialects:6.2.7.Final") + compileOnly("org.projectlombok:lombok:1.18.38") + annotationProcessor("org.projectlombok:lombok:1.18.38") + testCompileOnly("org.projectlombok:lombok:1.18.38") + testAnnotationProcessor("org.projectlombok:lombok:1.18.38") } application { @@ -76,4 +79,4 @@ configure { // fix formatting of type annotations formatAnnotations() } -} \ No newline at end of file +} From 01c63a38de1518f1c5df5d416cc47981eab31bf0 Mon Sep 17 00:00:00 2001 From: Dylan Date: Mon, 5 May 2025 16:31:55 +0000 Subject: [PATCH 3/4] feat: Adds get post and delete mapping for the MediaItemsController --- .../com/codedifferently/lesson26/web/MediaItemsController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 386f091f8..59d6e750a 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 @@ -36,7 +36,7 @@ public ResponseEntity getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); } - + @GetMapping("/items/{id}") public ResponseEntity getItemById(@PathVariable UUID id) { SearchCriteria criteria = SearchCriteria.builder().id(id.toString()).build(); From 7dd3a8959053c4040c23536f6e51aac9c1cbe8c7 Mon Sep 17 00:00:00 2001 From: Dylan Date: Thu, 8 May 2025 21:11:46 +0000 Subject: [PATCH 4/4] fix: gets rid of the valid parameter --- .../com/codedifferently/lesson26/web/MediaItemsController.java | 3 +-- 1 file changed, 1 insertion(+), 2 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 59d6e750a..9e0da7494 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 @@ -4,7 +4,6 @@ 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; @@ -52,7 +51,7 @@ public ResponseEntity getItemById(@PathVariable UUID id) { } @PostMapping("/items") - public CreateMediaItemResponse addItem(@Valid @RequestBody CreateMediaItemRequest request) { + public CreateMediaItemResponse addItem(@RequestBody CreateMediaItemRequest request) { MediaItemRequest itemCreation = request.getItem(); MediaItem item = MediaItemRequest.asMediaItem(itemCreation); library.addMediaItem(item, librarian);