From 136f96736f8167da9e1140f4f949220640a3b222 Mon Sep 17 00:00:00 2001 From: Dasiame Date: Mon, 2 Dec 2024 15:51:56 +0000 Subject: [PATCH 1/4] feat:Adds Dasia's implement the MediaItemsController to enable the API to lesson_26 --- lesson_26/api/java/api_app/package-lock.json | 6 +++++ .../lesson26/web/MediaItemsController.java | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 lesson_26/api/java/api_app/package-lock.json diff --git a/lesson_26/api/java/api_app/package-lock.json b/lesson_26/api/java/api_app/package-lock.json new file mode 100644 index 000000000..06e0359a3 --- /dev/null +++ b/lesson_26/api/java/api_app/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "api_app", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} 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..9b65b59ef 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 @@ -8,7 +8,9 @@ import java.util.List; import java.util.Set; 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; @RestController @@ -29,4 +31,26 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + + @GetMapping("/items") + public GetMediaItemsResponse postItems() { + Set items = library.search(SearchCriteria.builder().build()); + List responseItems = items.stream().map(MediaItemResponse::from).toList(); + return postItems(); + } + + @GetMapping("/items/:id") + public GetMediaItemsResponse getItemsId(@PathVariable String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + MediaItemResponse responseItem = items.stream().map(MediaItemResponse::from).iterator().next(); + return GetMediaItemsResponse.builder().item(responseItem).build(); + } + + @DeleteMapping(value = "{id}") + public void deletebById(@PathVariable String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + MediaItem item = items.iterator().next(); + library.removeMediaItem(item, librarian); + } + } From 17b8ddc72bc1f4513491e075b56340dc2f3c0cb6 Mon Sep 17 00:00:00 2001 From: Dasiame Date: Mon, 2 Dec 2024 15:57:14 +0000 Subject: [PATCH 2/4] feat:Adds spotlessApply --- .../com/codedifferently/lesson26/web/MediaItemsController.java | 1 - 1 file changed, 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 9b65b59ef..f081f8b09 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 @@ -52,5 +52,4 @@ public void deletebById(@PathVariable String id) { MediaItem item = items.iterator().next(); library.removeMediaItem(item, librarian); } - } From 311ffcda941dbc88af69303c0483cea64501ccbb Mon Sep 17 00:00:00 2001 From: Dasiame Date: Mon, 2 Dec 2024 16:31:34 +0000 Subject: [PATCH 3/4] feat:Adds lesson_26 work --- .../lesson26/web/MediaItemsController.java | 33 +++++++++++++------ 1 file changed, 23 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 f081f8b09..44f07872c 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,13 +4,17 @@ 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; 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 @@ -32,24 +36,33 @@ public GetMediaItemsResponse getItems() { return response; } - @GetMapping("/items") - public GetMediaItemsResponse postItems() { - Set items = library.search(SearchCriteria.builder().build()); - List responseItems = items.stream().map(MediaItemResponse::from).toList(); - return postItems(); + @PostMapping("/items") + public ResponseEntity postItems(@Valid @RequestBody CreateMediaItemRequest request) { + MediaItemRequest itemRequest = request.getItem(); + MediaItem item = MediaItemRequest.asMediaItem(itemRequest); + library.addMediaItem(item, librarian); + MediaItemResponse response = MediaItemResponse.from(item); + return ResponseEntity.ok(CreateMediaItemResponse.builder().item(response).build()); } - @GetMapping("/items/:id") - public GetMediaItemsResponse getItemsId(@PathVariable String id) { + @GetMapping("/items/{id}") + public ResponseEntity getItemsId(@PathVariable String id) { Set items = library.search(SearchCriteria.builder().id(id).build()); + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } MediaItemResponse responseItem = items.stream().map(MediaItemResponse::from).iterator().next(); - return GetMediaItemsResponse.builder().item(responseItem).build(); + return ResponseEntity.ok(GetMediaItemsResponse.builder().item(responseItem).build()); } - @DeleteMapping(value = "{id}") - public void deletebById(@PathVariable String id) { + @DeleteMapping("/items/{id}") + public ResponseEntity deletebById(@PathVariable String id) { Set items = library.search(SearchCriteria.builder().id(id).build()); MediaItem item = items.iterator().next(); + if (items.isEmpty() || item == null) { + ResponseEntity.notFound().build(); + } library.removeMediaItem(item, librarian); + return ResponseEntity.noContent().build(); } } From e787b6be024e805227547f5bbfe84e8f946bb2de Mon Sep 17 00:00:00 2001 From: Dasiame Date: Mon, 2 Dec 2024 16:53:32 +0000 Subject: [PATCH 4/4] feat:Adds checks for ithe wrong use of an API --- .../lesson26/web/MediaItemsController.java | 25 +++++++++++-------- 1 file changed, 15 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 44f07872c..214a8dc10 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,13 +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 org.hibernate.validator.constraints.UUID; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; @@ -17,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 { @@ -37,7 +41,8 @@ public GetMediaItemsResponse getItems() { } @PostMapping("/items") - public ResponseEntity postItems(@Valid @RequestBody CreateMediaItemRequest request) { + public ResponseEntity postItems( + @Valid @RequestBody CreateMediaItemRequest request) { MediaItemRequest itemRequest = request.getItem(); MediaItem item = MediaItemRequest.asMediaItem(itemRequest); library.addMediaItem(item, librarian); @@ -56,11 +61,11 @@ public ResponseEntity getItemsId(@PathVariable String id) } @DeleteMapping("/items/{id}") - public ResponseEntity deletebById(@PathVariable String id) { - Set items = library.search(SearchCriteria.builder().id(id).build()); + public ResponseEntity deletebById(@PathVariable UUID id) { + Set items = library.search(SearchCriteria.builder().id(id.toString()).build()); MediaItem item = items.iterator().next(); - if (items.isEmpty() || item == null) { - ResponseEntity.notFound().build(); + if(items.isEmpty()){ + return ResponseEntity.notFound().build(); } library.removeMediaItem(item, librarian); return ResponseEntity.noContent().build();