From 10d4a74fea3aaa02149c6a8725dfcac046e1893a Mon Sep 17 00:00:00 2001 From: Kevin J Hoerr Date: Mon, 31 Jan 2022 14:29:56 -0500 Subject: Use Long's for ID; Accept JSON body --- .devcontainer/devcontainer.json | 4 ++-- src/main/java/dev/submelon/pantry/PantryItem.java | 2 +- .../dev/submelon/pantry/PantryItemController.java | 28 ++++++++++++---------- .../dev/submelon/pantry/PantryItemRepository.java | 2 +- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index ba3ebc2..cb0c829 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,7 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: // https://github.com/microsoft/vscode-dev-containers/tree/v0.209.6/containers/java { - "name": "Java", + "name": "Pantry", "dockerComposeFile": "docker-compose.yml", "service": "pantry", "workspaceFolder": "/workspaces/pantry", @@ -24,7 +24,7 @@ // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "mvn dependency:resolve", + "postCreateCommand": "mvn compile spring-boot:run", // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. "remoteUser": "vscode", diff --git a/src/main/java/dev/submelon/pantry/PantryItem.java b/src/main/java/dev/submelon/pantry/PantryItem.java index 459c3b7..97ab62d 100644 --- a/src/main/java/dev/submelon/pantry/PantryItem.java +++ b/src/main/java/dev/submelon/pantry/PantryItem.java @@ -17,7 +17,7 @@ import lombok.Setter; public class PantryItem { @Id @GeneratedValue(strategy=GenerationType.AUTO) - private Integer id; + private Long id; @Column(nullable=false) private String name; diff --git a/src/main/java/dev/submelon/pantry/PantryItemController.java b/src/main/java/dev/submelon/pantry/PantryItemController.java index 1968139..c1da12e 100644 --- a/src/main/java/dev/submelon/pantry/PantryItemController.java +++ b/src/main/java/dev/submelon/pantry/PantryItemController.java @@ -3,9 +3,10 @@ package dev.submelon.pantry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller @@ -14,17 +15,20 @@ public class PantryItemController { @Autowired private PantryItemRepository itemRepository; - @PostMapping(path="/add") + @PutMapping(path="/{id}") @ResponseBody - Integer addNewItem(@RequestParam String name, @RequestParam String description, @RequestParam double quantity, @RequestParam String quantityUnitType) { - PantryItem item = new PantryItem(); - item.setName(name); - item.setDescription(description); - item.setQuantity(quantity); - item.setQuantityUnitType(quantityUnitType); - - PantryItem updatedItem = itemRepository.save(item); - return updatedItem.getId(); + PantryItem addNewItem(@RequestBody PantryItem item, @PathVariable Long id) { + return itemRepository.findById(id) + .map(existingItem -> { + existingItem.setName(item.getName()); + existingItem.setDescription(item.getDescription()); + existingItem.setQuantity(item.getQuantity()); + existingItem.setQuantityUnitType(item.getQuantityUnitType()); + return itemRepository.save(existingItem); + }) + .orElseGet(() -> { + return itemRepository.save(item); + }); } @GetMapping(path="") diff --git a/src/main/java/dev/submelon/pantry/PantryItemRepository.java b/src/main/java/dev/submelon/pantry/PantryItemRepository.java index 24b4bee..947ad6b 100644 --- a/src/main/java/dev/submelon/pantry/PantryItemRepository.java +++ b/src/main/java/dev/submelon/pantry/PantryItemRepository.java @@ -4,7 +4,7 @@ import java.util.Optional; import org.springframework.data.repository.CrudRepository; -public interface PantryItemRepository extends CrudRepository { +public interface PantryItemRepository extends CrudRepository { Optional findByName(String name); -- cgit