From 4005d7c5fff1cb6e4812cb8532fffdc4a7d23a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=ED=99=8D=EB=B2=94?= Date: Sun, 15 Dec 2024 18:18:07 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9E=AC=EB=A3=8C=20=C3=AC=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=ED=95=A0=20=EC=88=98=EB=9F=89=20=EC=9E=85=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ingredient/IngredientController.java | 12 ++++++++-- .../request/IngredientDeleteRequest.java | 11 ++++++++++ .../service/ingredient/IngredientService.java | 2 +- .../ingredient/IngredientServiceImpl.java | 22 +++++++++++++++---- 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientDeleteRequest.java diff --git a/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java b/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java index d791df5..7e78ac9 100644 --- a/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java +++ b/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java @@ -1,5 +1,6 @@ package moja.refrigerator.controller.ingredient; +import jakarta.persistence.EntityNotFoundException; import moja.refrigerator.dto.ingredient.request.*; import moja.refrigerator.dto.ingredient.response.*; import moja.refrigerator.service.ingredient.IngredientService; @@ -44,8 +45,15 @@ public void updateIngredient(@RequestBody IngredientUpdateRequest request) { // 재료 삭제 @DeleteMapping - public void deleteIngredient(@RequestParam Long ingredientMyRefrigeratorPk) { - ingredientService.deleteIngredient(ingredientMyRefrigeratorPk); + public ResponseEntity deleteIngredient(@RequestBody IngredientDeleteRequest request) { + try { + ingredientService.deleteIngredient(request); + return ResponseEntity.ok("재료가 성공적으로 삭제되었습니다."); + } catch (IllegalArgumentException e) { + return ResponseEntity.badRequest().body(e.getMessage()); + } catch (EntityNotFoundException e) { + return ResponseEntity.notFound().build(); + } } @PostMapping("/bookmark/regist") diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientDeleteRequest.java b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientDeleteRequest.java new file mode 100644 index 0000000..063da41 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientDeleteRequest.java @@ -0,0 +1,11 @@ +package moja.refrigerator.dto.ingredient.request; + +import lombok.Data; + +@Data +public class IngredientDeleteRequest { + + private Long ingredientMyRefrigeratorPk; + private float deleteAmount; + +} diff --git a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java index 3c237e8..c73c9aa 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java @@ -14,7 +14,7 @@ public interface IngredientService { List getIngredient(Long userPk); // 재료 조회 메서드 void updateIngredient(IngredientUpdateRequest request); - void deleteIngredient(long ingredientMyRefrigeratorPk); + void deleteIngredient(IngredientDeleteRequest request); List getUsersIngredientBookmarkLists( RequestIngredientBookmarkLists requestBookmarkLists); diff --git a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java index d3014e9..3b25f4f 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java @@ -102,11 +102,25 @@ public void updateIngredient(IngredientUpdateRequest request) { @Override @Transactional - public void deleteIngredient(long ingredientMyRefrigeratorPk) { - if (!ingredientMyRefrigeratorRepository.existsById(ingredientMyRefrigeratorPk)) { - throw new EntityNotFoundException("삭제할 재료를 찾을 수 없습니다."); + public void deleteIngredient(IngredientDeleteRequest request) { + IngredientMyRefrigerator ingredient = ingredientMyRefrigeratorRepository + .findById(request.getIngredientMyRefrigeratorPk()) + .orElseThrow(() -> new IllegalArgumentException("삭제할 재료를 찾을 수 없습니다.")); + + float currentAmount = ingredient.getIngredientAmount(); + float deleteAmount = request.getDeleteAmount(); + + if (currentAmount < deleteAmount) { + throw new IllegalArgumentException("삭제할 수량이 현재 보유 수량보다 많습니다."); + } + // 삭제할 수량이 딱 맞아 떨어지면 재료를 완전 삭제 + if (currentAmount == deleteAmount) { + ingredientMyRefrigeratorRepository.deleteById(request.getIngredientMyRefrigeratorPk()); + } else { + // 현재 수량 - 삭제할 수량의 계산 결과를 저장 + ingredient.setIngredientAmount(currentAmount - deleteAmount); + ingredientMyRefrigeratorRepository.save(ingredient); } - ingredientMyRefrigeratorRepository.deleteById(ingredientMyRefrigeratorPk); } @Override