From c702f357b333b9ec45406a893061d2f10f2b078d Mon Sep 17 00:00:00 2001 From: mercedes-mathews Date: Mon, 5 May 2025 16:17:12 +0000 Subject: [PATCH 1/2] feat: adds completed MediaItemsController --- lesson_26/api/java/api_app/build.gradle.kts | 5 +- .../lesson26/web/MediaItemsController.java | 60 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/lesson_26/api/java/api_app/build.gradle.kts b/lesson_26/api/java/api_app/build.gradle.kts index ac0c0e680..349bae625 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 { 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..8af7c6762 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 @@ -3,13 +3,21 @@ import com.codedifferently.lesson26.library.Librarian; import com.codedifferently.lesson26.library.Library; import com.codedifferently.lesson26.library.MediaItem; +import com.codedifferently.lesson26.library.exceptions.MediaItemCheckedOutException; 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.HttpStatus; 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 @@ -31,4 +39,56 @@ public ResponseEntity getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); 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); + } + + @GetMapping("/items/{id}") + public ResponseEntity getItemById(@PathVariable UUID id) { + Set items = library.search(SearchCriteria.builder().build()); + MediaItem foundItem = + items.stream().filter(item -> item.getId().equals(id)).findFirst().orElse(null); + if (foundItem != null) { + MediaItemResponse itemResponse = MediaItemResponse.from(foundItem); + return ResponseEntity.ok(itemResponse); + } else { + return ResponseEntity.notFound().build(); + } + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable String id) { // Takes String id + UUID itemUuid; + + try { + itemUuid = UUID.fromString(id); + } catch (IllegalArgumentException e) { + return ResponseEntity.badRequest().build(); + } + + Set items = library.search(SearchCriteria.builder().build()); + MediaItem foundItem = + items.stream().filter(item -> item.getId().equals(itemUuid)).findFirst().orElse(null); + + if (foundItem == null) { + return ResponseEntity.notFound().build(); + } + + try { + library.removeMediaItem(itemUuid, this.librarian); + return ResponseEntity.noContent().build(); + } catch (MediaItemCheckedOutException ex) { + return ResponseEntity.status(HttpStatus.CONFLICT).build(); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } } From 570f432831e2cf83ed9b77780dc049601b06aea5 Mon Sep 17 00:00:00 2001 From: mercedes-mathews Date: Mon, 5 May 2025 18:04:55 +0000 Subject: [PATCH 2/2] fix: changed the id type in deleteItem method --- .../lesson26/web/MediaItemsController.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 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 8af7c6762..f1319124e 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 @@ -65,25 +65,18 @@ public ResponseEntity getItemById(@PathVariable UUID id) { } @DeleteMapping("/items/{id}") - public ResponseEntity deleteItem(@PathVariable String id) { // Takes String id - UUID itemUuid; - - try { - itemUuid = UUID.fromString(id); - } catch (IllegalArgumentException e) { - return ResponseEntity.badRequest().build(); - } + public ResponseEntity deleteItem(@PathVariable UUID id) { Set items = library.search(SearchCriteria.builder().build()); MediaItem foundItem = - items.stream().filter(item -> item.getId().equals(itemUuid)).findFirst().orElse(null); + items.stream().filter(item -> item.getId().equals(id)).findFirst().orElse(null); if (foundItem == null) { return ResponseEntity.notFound().build(); } try { - library.removeMediaItem(itemUuid, this.librarian); + library.removeMediaItem(id, this.librarian); return ResponseEntity.noContent().build(); } catch (MediaItemCheckedOutException ex) { return ResponseEntity.status(HttpStatus.CONFLICT).build();