From a5d1cd2a1a9d51db985cbf5bd8fab6228be0d41f Mon Sep 17 00:00:00 2001 From: haldanek Date: Sun, 1 Dec 2024 04:07:40 +0000 Subject: [PATCH 1/3] feat: add first draft of HTTP Methods for API --- .../lesson26/web/MediaItemsController.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) 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..00ba6c2f0 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 @@ -7,9 +7,13 @@ import java.io.IOException; import java.util.List; import java.util.Set; +import java.util.UUID; 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; +import org.springframework.web.bind.annotation.PostMapping; @RestController @CrossOrigin @@ -29,4 +33,45 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + + @PostMapping("/items") + public MediaItemResponse postItem() { + //UUID id = UUID.randomUUID(); + MediaItemRequest newItem = CreateMediaItemRequest.builder() + .id(UUID.randomUUID()) + .type("Book") + .isbn("13") + .title("The Fall of the House of Usher") + .authors(new String[] {"Edgar Allan Poe"}) + .edition("1st Edition") + .pages(25) + .build(); + + CreateMediaItemRequest createRequest = CreateMediaItemRequest.builder() + .item(newItem) + .build(); + + library.add(createRequest.getItem()); + + return MediaItemResponse.from(createRequest.getItem()); + } + + @GetMapping("/items/:{id}") + public GetMediaItemsResponse getItemById(@PathVariable("id") String id) { + Set item = library.search(SearchCriteria.builder().id(id).build()); + MediaItemResponse responseItemById = item.stream().map(MediaItemResponse::from).toList().findFirst().orElseThrow(); + var response = GetMediaItemsResponse.builder().item(responseItemById).build(); + return response; + } + + @DeleteMapping("/items/:{id}") + public MediaItemResponse deleteItemById(@PathVariable("id") String id) { + Set itemToDelete = library.search(SearchCriteria.builder().id(id).build()); + //MediaItemRequest deleteItem = CreateMediaItemRequest.builder().build(); + CreateMediaItemRequest createDeleteRequest = CreateMediaItemRequest.builder().deleteItem(itemToDelete).build(); + + library.delete(createDeleteRequest.getItem()); + + return MediaItemResponse.from(createDeleteRequest.getItem()); + } } From 37ecbc3b891909674736dfe8f4d85ad879e98b57 Mon Sep 17 00:00:00 2001 From: haldanek Date: Sun, 1 Dec 2024 07:49:16 +0000 Subject: [PATCH 2/3] chore: made a few changes in the HTTP methods -MediaItemsController --- .../lesson26/web/MediaItemsController.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 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 00ba6c2f0..b8b9a87fb 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 @@ -59,19 +59,18 @@ public MediaItemResponse postItem() { @GetMapping("/items/:{id}") public GetMediaItemsResponse getItemById(@PathVariable("id") String id) { Set item = library.search(SearchCriteria.builder().id(id).build()); - MediaItemResponse responseItemById = item.stream().map(MediaItemResponse::from).toList().findFirst().orElseThrow(); + List responseItemById = item.stream().map(MediaItemResponse::from).toList(); + MediaItemResponse findItem = responseItemById.stream().findFirst().orElseThrow(); var response = GetMediaItemsResponse.builder().item(responseItemById).build(); return response; } @DeleteMapping("/items/:{id}") public MediaItemResponse deleteItemById(@PathVariable("id") String id) { - Set itemToDelete = library.search(SearchCriteria.builder().id(id).build()); - //MediaItemRequest deleteItem = CreateMediaItemRequest.builder().build(); - CreateMediaItemRequest createDeleteRequest = CreateMediaItemRequest.builder().deleteItem(itemToDelete).build(); + MediaItem itemToDelete = library.search(SearchCriteria.builder().id(id).build()).stream().findFirst().orElseThrow(); - library.delete(createDeleteRequest.getItem()); + library.delete(itemToDelete); - return MediaItemResponse.from(createDeleteRequest.getItem()); + return MediaItemResponse.from(itemToDelete); } } From 20ac23bd9bbf3f078fab75c70c1cbfb7a55d19c9 Mon Sep 17 00:00:00 2001 From: haldanek Date: Mon, 2 Dec 2024 04:50:22 +0000 Subject: [PATCH 3/3] chore: 2nd draft of HTTP methods --- .../lesson26/web/MediaItemsController.java | 40 +++++++------------ 1 file changed, 14 insertions(+), 26 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 b8b9a87fb..382ee4f4d 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 @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; @RestController @CrossOrigin @@ -35,41 +36,28 @@ public GetMediaItemsResponse getItems() { } @PostMapping("/items") - public MediaItemResponse postItem() { - //UUID id = UUID.randomUUID(); - MediaItemRequest newItem = CreateMediaItemRequest.builder() - .id(UUID.randomUUID()) - .type("Book") - .isbn("13") - .title("The Fall of the House of Usher") - .authors(new String[] {"Edgar Allan Poe"}) - .edition("1st Edition") - .pages(25) - .build(); - - CreateMediaItemRequest createRequest = CreateMediaItemRequest.builder() - .item(newItem) - .build(); - + public MediaItemResponse addItemById(@RequestBody CreateMediaItemRequest createRequest) { + if (createRequest.getItem().getId() == null) { + createRequest.getItem().setId(UUID.randomUUID()); + } + library.add(createRequest.getItem()); return MediaItemResponse.from(createRequest.getItem()); } @GetMapping("/items/:{id}") - public GetMediaItemsResponse getItemById(@PathVariable("id") String id) { - Set item = library.search(SearchCriteria.builder().id(id).build()); - List responseItemById = item.stream().map(MediaItemResponse::from).toList(); - MediaItemResponse findItem = responseItemById.stream().findFirst().orElseThrow(); - var response = GetMediaItemsResponse.builder().item(responseItemById).build(); - return response; + public MediaItemResponse getItemById(@PathVariable("id") UUID id) { + MediaItem item = library.search(SearchCriteria.builder().id(id.toString()).build()).stream().findFirst().orElseThrow(); + + return MediaItemResponse.from(item); } @DeleteMapping("/items/:{id}") - public MediaItemResponse deleteItemById(@PathVariable("id") String id) { - MediaItem itemToDelete = library.search(SearchCriteria.builder().id(id).build()).stream().findFirst().orElseThrow(); - - library.delete(itemToDelete); + public MediaItemResponse deleteItemById(@PathVariable("id") UUID id) { + MediaItem itemToDelete = library.search(SearchCriteria.builder().id(id.toString()).build()).stream().findFirst().orElseThrow(); + Librarian librarian = library.getLibrarians().stream().findFirst().orElseThrow(); + library.removeMediaItem(itemToDelete, librarian); return MediaItemResponse.from(itemToDelete); }