From db7465b82d17a783fc7c46a65a9049b01a48ba53 Mon Sep 17 00:00:00 2001 From: Meiko-S22 Date: Mon, 5 May 2025 15:57:50 +0000 Subject: [PATCH 1/5] feat: implements MediaItemsController --- lesson_26/api/java/api_app/build.gradle.kts | 6 ++- .../lesson26/library/Library.java | 9 ++++ .../lesson26/web/CreateMediaItemRequest.java | 4 ++ .../lesson26/web/MediaItemsController.java | 48 +++++++++++++++++-- 4 files changed, 62 insertions(+), 5 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..a7745535f 100644 --- a/lesson_26/api/java/api_app/build.gradle.kts +++ b/lesson_26/api/java/api_app/build.gradle.kts @@ -5,7 +5,7 @@ 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" + // id("io.freefair.lombok") version "8.6" } apply(plugin = "io.spring.dependency-management") @@ -39,6 +39,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/library/Library.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/library/Library.java index 2071a60f3..f6149a6b1 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/library/Library.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/library/Library.java @@ -6,6 +6,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -297,4 +298,12 @@ public String toString() { + guestsById + '}'; } + + public List getAllItems() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Object getAnItem(UUID id) { + throw new UnsupportedOperationException("Not supported yet."); + } } diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/CreateMediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/CreateMediaItemRequest.java index 26f7e1a4a..4b676e865 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/CreateMediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/CreateMediaItemRequest.java @@ -14,4 +14,8 @@ public class CreateMediaItemRequest { @NotNull(message = "item is required") @Valid private MediaItemRequest item; + + MediaItemRequest getItem() { + throw new UnsupportedOperationException("Not supported yet."); + } } 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..36f08c7f9 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,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 { @@ -31,4 +40,35 @@ public ResponseEntity getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); } + + @PostMapping("/items") + public CreateMediaItemResponse postItem(@Valid @RequestBody CreateMediaItemRequest request) { + MediaItem item = MediaItemRequest.asMediaItem(request.getItem()); + library.addMediaItem(item, librarian); + return CreateMediaItemResponse.builder().item(MediaItemResponse.from(item)).build(); + } + + @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()) { + MediaItem item = items.iterator().next(); + MediaItemResponse response = MediaItemResponse.from(item); + return ResponseEntity.ok(response); + } else { + return ResponseEntity.notFound().build(); + } + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteMediaItem(@PathVariable("id") UUID id) { + try { + library.removeMediaItem(id, librarian); + return ResponseEntity.noContent().build(); + } catch (Exception e) { + return ResponseEntity.notFound().build(); + } + } } From 850f2ac59e3cc920011710de30c8dbd65bb1da99 Mon Sep 17 00:00:00 2001 From: Meiko-S22 Date: Mon, 5 May 2025 16:02:24 +0000 Subject: [PATCH 2/5] feat: implements MediaItemsController --- .../lesson26/web/MediaItemsController.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 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 36f08c7f9..cddb4fc4c 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 { From 5d829508d8c2cdba8d76f25526d268484874d036 Mon Sep 17 00:00:00 2001 From: Meiko-S22 Date: Mon, 5 May 2025 17:05:15 +0000 Subject: [PATCH 3/5] featt: implments completed MediaItemsController --- .../lesson26/web/MediaItemsController.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 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 cddb4fc4c..695eda259 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,14 +1,10 @@ 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; @@ -18,6 +14,13 @@ 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,10 +42,14 @@ public ResponseEntity getItems() { } @PostMapping("/items") - public CreateMediaItemResponse postItem(@Valid @RequestBody CreateMediaItemRequest request) { - MediaItem item = MediaItemRequest.asMediaItem(request.getItem()); + public ResponseEntity postItem( + @Valid @RequestBody CreateMediaItemRequest request) { + MediaItemRequest itemRequest = request.getItem(); + MediaItem item = MediaItemRequest.asMediaItem(itemRequest); library.addMediaItem(item, librarian); - return CreateMediaItemResponse.builder().item(MediaItemResponse.from(item)).build(); + MediaItemResponse itemResponse = MediaItemResponse.from(item); + CreateMediaItemResponse response = CreateMediaItemResponse.builder().item(itemResponse).build(); + return ResponseEntity.ok(response); } @GetMapping("/items/{id}") From 9ecb0e7471f0d7b65b8a972b09086212b21c600a Mon Sep 17 00:00:00 2001 From: Meiko-S22 Date: Tue, 6 May 2025 13:55:36 +0000 Subject: [PATCH 4/5] feat: implements completed MediaItemsCOntroller --- .../lesson26/web/CreateMediaItemRequest.java | 4 ---- .../lesson26/web/MediaItemsController.java | 9 ++++----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/CreateMediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/CreateMediaItemRequest.java index 4b676e865..26f7e1a4a 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/CreateMediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/CreateMediaItemRequest.java @@ -14,8 +14,4 @@ public class CreateMediaItemRequest { @NotNull(message = "item is required") @Valid private MediaItemRequest item; - - MediaItemRequest getItem() { - throw new UnsupportedOperationException("Not supported yet."); - } } 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 695eda259..77e019eb0 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 @@ -42,12 +42,11 @@ public ResponseEntity getItems() { } @PostMapping("/items") - public ResponseEntity postItem( - @Valid @RequestBody CreateMediaItemRequest request) { + public ResponseEntity postItem(@Valid @RequestBody CreateMediaItemRequest request) { MediaItemRequest itemRequest = request.getItem(); - MediaItem item = MediaItemRequest.asMediaItem(itemRequest); - library.addMediaItem(item, librarian); - MediaItemResponse itemResponse = MediaItemResponse.from(item); + MediaItem newItem = MediaItemRequest.asMediaItem(itemRequest); + library.addMediaItem(newItem, librarian); + MediaItemResponse itemResponse = MediaItemResponse.from(newItem); CreateMediaItemResponse response = CreateMediaItemResponse.builder().item(itemResponse).build(); return ResponseEntity.ok(response); } From 71247a95b45611a272f0165f102ad09f3197d520 Mon Sep 17 00:00:00 2001 From: Meiko-S22 Date: Tue, 6 May 2025 13:57:39 +0000 Subject: [PATCH 5/5] feat: implements completed MediaItemsController --- .../lesson26/web/MediaItemsController.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 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 77e019eb0..acb9c675e 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 { @@ -42,7 +39,8 @@ public ResponseEntity getItems() { } @PostMapping("/items") - public ResponseEntity postItem(@Valid @RequestBody CreateMediaItemRequest request) { + public ResponseEntity postItem( + @Valid @RequestBody CreateMediaItemRequest request) { MediaItemRequest itemRequest = request.getItem(); MediaItem newItem = MediaItemRequest.asMediaItem(itemRequest); library.addMediaItem(newItem, librarian);