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