From b7c91b6011ec17e8461b891c72f0d1652775e379 Mon Sep 17 00:00:00 2001 From: Xavier Cruz <68714224+XavierCruz5106@users.noreply.github.com> Date: Fri, 22 Nov 2024 16:51:01 -0500 Subject: [PATCH 1/6] feat: adds unfinished methods, fixes bug in MediaItemRequest --- .../lesson26/web/MediaItemRequest.java | 2 +- .../lesson26/web/MediaItemsController.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java index 3cdc9ee9b..74552dbeb 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java @@ -33,7 +33,7 @@ public class MediaItemRequest { public static MediaItem asMediaItem(MediaItemRequest request) { var id = request.id != null ? request.id : UUID.randomUUID(); - switch (request.type.toUpperCase()) { + switch (request.type.toLowerCase()) { case "book" -> { return new Book(id, request.title, request.isbn, List.of(request.authors), request.pages); } 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..35a6feec3 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 @@ -9,6 +9,7 @@ import java.util.Set; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @RestController @@ -29,4 +30,16 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + + @GetMapping("/items:id") + public MediaItemResponse getItemById(){ + return null; + } + + @PostMapping("/items") + public CreateMediaItemResponse createMediaItem() { + + + return null; + } } From c447ceeb088c11b6595b3e80dcc544a0b567a40d Mon Sep 17 00:00:00 2001 From: Xavier Cruz <68714224+XavierCruz5106@users.noreply.github.com> Date: Fri, 22 Nov 2024 17:13:19 -0500 Subject: [PATCH 2/6] feat: absolutely no idea what i am doing. Lombok is weird --- .../lesson26/web/MediaItemsController.java | 11 ++++++++++- 1 file changed, 10 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 35a6feec3..9e2a6ffc6 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,6 +4,9 @@ import com.codedifferently.lesson26.library.Library; import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.search.SearchCriteria; + +import io.swagger.v3.oas.annotations.parameters.RequestBody; + import java.io.IOException; import java.util.List; import java.util.Set; @@ -37,8 +40,14 @@ public MediaItemResponse getItemById(){ } @PostMapping("/items") - public CreateMediaItemResponse createMediaItem() { + public CreateMediaItemResponse createMediaItem(@RequestBody MediaItemRequest itemRequest) { + + + var request = CreateMediaItemRequest.builder().item(itemRequest).build(); + + var item = MediaItemRequest.asMediaItem(request.getItem()); + library.addMediaItem(item, librarian); return null; } From f475a30f18b08688fa107bef3c247b2aeaae38b3 Mon Sep 17 00:00:00 2001 From: Xavier Cruz <68714224+XavierCruz5106@users.noreply.github.com> Date: Fri, 22 Nov 2024 19:54:46 -0500 Subject: [PATCH 3/6] feat: adds GET POST GET:id DELETE:id mappings --- .../lesson26/web/CreateMediaItemRequest.java | 4 +- .../lesson26/web/MediaItemRequest.java | 13 ++++- .../lesson26/web/MediaItemsController.java | 57 ++++++++++++++++--- 3 files changed, 62 insertions(+), 12 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 26f7e1a4a..56a89d63b 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 @@ -1,5 +1,7 @@ package com.codedifferently.lesson26.web; +import com.fasterxml.jackson.annotation.JsonProperty; + import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; @@ -12,6 +14,6 @@ @NoArgsConstructor @Builder public class CreateMediaItemRequest { - @NotNull(message = "item is required") @Valid + @NotNull(message = "item is required") @Valid @JsonProperty("item") private MediaItemRequest item; } diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java index 74552dbeb..0dae260f7 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java @@ -5,6 +5,8 @@ import com.codedifferently.lesson26.library.Magazine; import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.Newspaper; +import com.fasterxml.jackson.annotation.JsonProperty; + import jakarta.validation.constraints.NotBlank; import java.util.List; import java.util.UUID; @@ -18,17 +20,22 @@ @NoArgsConstructor @Builder public class MediaItemRequest { - + @JsonProperty("id") private UUID id; + @JsonProperty("type") private String type; + @JsonProperty("isbn") private String isbn; - + @JsonProperty("title") @NotBlank(message = "Title is required") private String title; - + @JsonProperty("authors") private String[] authors; + @JsonProperty("edition") private String edition; + @JsonProperty("pages") private int pages; + @JsonProperty("runtime") private int runtime; public static MediaItem asMediaItem(MediaItemRequest request) { 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 9e2a6ffc6..591326f61 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 @@ -5,13 +5,22 @@ import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.search.SearchCriteria; -import io.swagger.v3.oas.annotations.parameters.RequestBody; +import jakarta.validation.Valid; + +import org.springframework.web.bind.annotation.RequestBody; + 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.MethodArgumentNotValidException; 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.RestController; @@ -34,21 +43,53 @@ public GetMediaItemsResponse getItems() { return response; } - @GetMapping("/items:id") - public MediaItemResponse getItemById(){ - return null; + @GetMapping("/items/{id}") + public ResponseEntity getItemById(@PathVariable("id") UUID id) { + String stringId = id.toString(); + SearchCriteria searchCriteria = SearchCriteria.builder().id(stringId).build(); + + Set foundItems = library.search(searchCriteria); + + if (foundItems.isEmpty()) { + return ResponseEntity.notFound().build(); + } + + MediaItem item = foundItems.iterator().next(); + MediaItemResponse response = MediaItemResponse.from(item); + + return ResponseEntity.ok(response); } @PostMapping("/items") - public CreateMediaItemResponse createMediaItem(@RequestBody MediaItemRequest itemRequest) { + public CreateMediaItemResponse createMediaItem(@RequestBody @Valid CreateMediaItemRequest request) throws MethodArgumentNotValidException { + + MediaItemRequest itemRequest = request.getItem(); - var request = CreateMediaItemRequest.builder().item(itemRequest).build(); + System.out.println(request); - var item = MediaItemRequest.asMediaItem(request.getItem()); + + var item = MediaItemRequest.asMediaItem(itemRequest); library.addMediaItem(item, librarian); - return null; + var response = CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build(); + + return response; + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable("id") UUID id){ + + + if(getItemById(id).getBody() == null) { + return ResponseEntity.notFound().build(); + } + + library.removeMediaItem(id, librarian); + + + return ResponseEntity.noContent().build(); + } } From 55e581eca0102550a2358d74e1cbee4d9a20236b Mon Sep 17 00:00:00 2001 From: Xavier Cruz <68714224+XavierCruz5106@users.noreply.github.com> Date: Fri, 22 Nov 2024 19:55:50 -0500 Subject: [PATCH 4/6] chore: spotlessApply --- .../lesson26/web/CreateMediaItemRequest.java | 4 ++-- .../lesson26/web/MediaItemRequest.java | 8 ++++++- .../lesson26/web/MediaItemsController.java | 24 +++++++------------ 3 files changed, 17 insertions(+), 19 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 56a89d63b..0ce62bbf1 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 @@ -1,7 +1,6 @@ package com.codedifferently.lesson26.web; import com.fasterxml.jackson.annotation.JsonProperty; - import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; @@ -14,6 +13,7 @@ @NoArgsConstructor @Builder public class CreateMediaItemRequest { - @NotNull(message = "item is required") @Valid @JsonProperty("item") + @NotNull(message = "item is required") @Valid + @JsonProperty("item") private MediaItemRequest item; } diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java index 0dae260f7..4183e6658 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java @@ -6,7 +6,6 @@ import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.Newspaper; import com.fasterxml.jackson.annotation.JsonProperty; - import jakarta.validation.constraints.NotBlank; import java.util.List; import java.util.UUID; @@ -22,19 +21,26 @@ public class MediaItemRequest { @JsonProperty("id") private UUID id; + @JsonProperty("type") private String type; + @JsonProperty("isbn") private String isbn; + @JsonProperty("title") @NotBlank(message = "Title is required") private String title; + @JsonProperty("authors") private String[] authors; + @JsonProperty("edition") private String edition; + @JsonProperty("pages") private int pages; + @JsonProperty("runtime") private int runtime; 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 591326f61..4b3c2209c 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,17 +4,11 @@ import com.codedifferently.lesson26.library.Library; import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.search.SearchCriteria; - import jakarta.validation.Valid; - -import org.springframework.web.bind.annotation.RequestBody; - - 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.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.CrossOrigin; @@ -22,6 +16,7 @@ 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 @@ -51,7 +46,7 @@ public ResponseEntity getItemById(@PathVariable("id") UUID id Set foundItems = library.search(searchCriteria); if (foundItems.isEmpty()) { - return ResponseEntity.notFound().build(); + return ResponseEntity.notFound().build(); } MediaItem item = foundItems.iterator().next(); @@ -61,35 +56,32 @@ public ResponseEntity getItemById(@PathVariable("id") UUID id } @PostMapping("/items") - public CreateMediaItemResponse createMediaItem(@RequestBody @Valid CreateMediaItemRequest request) throws MethodArgumentNotValidException { + public CreateMediaItemResponse createMediaItem(@RequestBody @Valid CreateMediaItemRequest request) + throws MethodArgumentNotValidException { MediaItemRequest itemRequest = request.getItem(); - System.out.println(request); - var item = MediaItemRequest.asMediaItem(itemRequest); library.addMediaItem(item, librarian); - var response = CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build(); + var response = + CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build(); return response; } @DeleteMapping("/items/{id}") - public ResponseEntity deleteItem(@PathVariable("id") UUID id){ + public ResponseEntity deleteItem(@PathVariable("id") UUID id) { - - if(getItemById(id).getBody() == null) { + if (getItemById(id).getBody() == null) { return ResponseEntity.notFound().build(); } library.removeMediaItem(id, librarian); - return ResponseEntity.noContent().build(); - } } From 335d7dce448db2752732378ffa9ad0881e2e0648 Mon Sep 17 00:00:00 2001 From: Xavier Cruz <68714224+XavierCruz5106@users.noreply.github.com> Date: Sun, 24 Nov 2024 23:01:11 -0500 Subject: [PATCH 5/6] feat: refactor. removes debug statement --- .../lesson26/web/CreateMediaItemRequest.java | 1 - .../lesson26/web/MediaItemRequest.java | 8 -------- .../lesson26/web/MediaItemsController.java | 11 ++++++++--- 3 files changed, 8 insertions(+), 12 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 0ce62bbf1..7e564a9d0 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,6 +14,5 @@ @Builder public class CreateMediaItemRequest { @NotNull(message = "item is required") @Valid - @JsonProperty("item") private MediaItemRequest item; } diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java index 4183e6658..3deba8624 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java @@ -19,29 +19,21 @@ @NoArgsConstructor @Builder public class MediaItemRequest { - @JsonProperty("id") private UUID id; - @JsonProperty("type") private String type; - @JsonProperty("isbn") private String isbn; - @JsonProperty("title") @NotBlank(message = "Title is required") private String title; - @JsonProperty("authors") private String[] authors; - @JsonProperty("edition") private String edition; - @JsonProperty("pages") private int pages; - @JsonProperty("runtime") private int runtime; public static MediaItem asMediaItem(MediaItemRequest request) { 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 4b3c2209c..0ca9dbd7a 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,6 +7,7 @@ import jakarta.validation.Valid; import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.UUID; import org.springframework.http.ResponseEntity; @@ -61,8 +62,6 @@ public CreateMediaItemResponse createMediaItem(@RequestBody @Valid CreateMediaIt MediaItemRequest itemRequest = request.getItem(); - System.out.println(request); - var item = MediaItemRequest.asMediaItem(itemRequest); library.addMediaItem(item, librarian); @@ -76,7 +75,13 @@ public CreateMediaItemResponse createMediaItem(@RequestBody @Valid CreateMediaIt @DeleteMapping("/items/{id}") public ResponseEntity deleteItem(@PathVariable("id") UUID id) { - if (getItemById(id).getBody() == null) { + SearchCriteria query = new SearchCriteria(); + Set items = library.search(query); + Optional item = items.stream() + .filter(mediaItem -> mediaItem.getId().equals(id)) + .findFirst(); + + if (item.isEmpty()) { return ResponseEntity.notFound().build(); } From 93cc0721cd8510742b54bf51f3dbd24de3b47a34 Mon Sep 17 00:00:00 2001 From: Xavier Cruz <68714224+XavierCruz5106@users.noreply.github.com> Date: Sun, 24 Nov 2024 23:02:58 -0500 Subject: [PATCH 6/6] chore: spotlessApply --- .../lesson26/web/CreateMediaItemRequest.java | 1 - .../com/codedifferently/lesson26/web/MediaItemRequest.java | 1 - .../codedifferently/lesson26/web/MediaItemsController.java | 7 +++---- 3 files changed, 3 insertions(+), 6 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 7e564a9d0..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 @@ -1,6 +1,5 @@ package com.codedifferently.lesson26.web; -import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java index 3deba8624..d4e78d8a0 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java @@ -5,7 +5,6 @@ import com.codedifferently.lesson26.library.Magazine; import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.Newspaper; -import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotBlank; import java.util.List; import java.util.UUID; 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 0ca9dbd7a..2efa9be61 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 @@ -76,10 +76,9 @@ public CreateMediaItemResponse createMediaItem(@RequestBody @Valid CreateMediaIt public ResponseEntity deleteItem(@PathVariable("id") UUID id) { SearchCriteria query = new SearchCriteria(); - Set items = library.search(query); - Optional item = items.stream() - .filter(mediaItem -> mediaItem.getId().equals(id)) - .findFirst(); + Set items = library.search(query); + Optional item = + items.stream().filter(mediaItem -> mediaItem.getId().equals(id)).findFirst(); if (item.isEmpty()) { return ResponseEntity.notFound().build();