From 109c1f367b8c8316f3aa02304dbdd41391917d3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=ED=99=8D=EB=B2=94?= Date: Thu, 12 Dec 2024 19:34:29 +0900 Subject: [PATCH] =?UTF-8?q?Feat:=20"=EC=9E=AC=EB=A3=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EC=9E=AC=EB=A3=8C=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. IngredientResponse에 불필요한 생성자 제거 2. tbl_ingredient_category와 tbl_ingredient_storage에 카테고리와 보관방법 SQL로 몇 가지 INSERT 3. 재료명 조회 시 category_pk, storage_pk가 아닌 카테고리명과 보관방법명이 나오도록 수정 4. 재료 수정 기능 구현 5. 재료 삭제 기능 구현 -> ingredientManagementPk 를 url에 추가 입력하면 삭제 가능 --- .../ingredient/IngredientController.java | 14 ++++ .../request/IngredientCreateRequest.java | 4 +- .../request/IngredientUpdateRequest.java | 16 ++++ .../response/IngredientResponse.java | 13 +--- .../IngredientManagementRepository.java | 1 + .../service/ingredient/IngredientService.java | 3 + .../ingredient/IngredientServiceImpl.java | 73 ++++++++++++++----- 7 files changed, 95 insertions(+), 29 deletions(-) create mode 100644 refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientUpdateRequest.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 0e821ac..ac328ce 100644 --- a/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java +++ b/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java @@ -1,6 +1,7 @@ package moja.refrigerator.controller.ingredient; import moja.refrigerator.dto.ingredient.request.IngredientCreateRequest; +import moja.refrigerator.dto.ingredient.request.IngredientUpdateRequest; import moja.refrigerator.dto.ingredient.response.IngredientResponse; import moja.refrigerator.service.ingredient.IngredientService; import org.springframework.beans.factory.annotation.Autowired; @@ -29,4 +30,17 @@ public void createIngredient(@RequestBody IngredientCreateRequest request) { public List getIngredient() { return ingredientService.getIngredient(); } + + // 재료 정보 수정 + @PutMapping + public void updateIngredient(@RequestBody IngredientUpdateRequest request) { + ingredientService.updateIngredient(request); + } + + // 재료 삭제 + @DeleteMapping + public void deleteIngredient(@RequestParam long ingredientManagementPK) { + ingredientService.deleteIngredient(ingredientManagementPK); + } + } diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientCreateRequest.java b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientCreateRequest.java index ac63e4b..eacc7e4 100644 --- a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientCreateRequest.java +++ b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientCreateRequest.java @@ -9,6 +9,6 @@ public class IngredientCreateRequest { private String registrationDate; private int seasonDate; -// private int ingredientCategoryPk; -// private int ingredientStoragePk; + private int ingredientCategoryPk; + private int ingredientStoragePk; } diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientUpdateRequest.java b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientUpdateRequest.java new file mode 100644 index 0000000..f1abb73 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientUpdateRequest.java @@ -0,0 +1,16 @@ +package moja.refrigerator.dto.ingredient.request; + +import lombok.Data; + +@Data +public class IngredientUpdateRequest { + + private long ingredientManagementPk; + private String ingredientName; + private String expirationDate; + private String registrationDate; + private int seasonDate; + private int ingredientCategoryPk; + private int ingredientStoragePk; + +} diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/response/IngredientResponse.java b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/response/IngredientResponse.java index a98038f..5ce316c 100644 --- a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/response/IngredientResponse.java +++ b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/response/IngredientResponse.java @@ -9,16 +9,11 @@ public class IngredientResponse { private String expirationDate; private String registrationDate; private int seasonDate; + // 조회 시에는 pk 말고 이름으로 조회 되도록 + private String ingredientCategory; + private String ingredientStorage; - // ModelMapper를 위한 기본 생성자 생성 + // ModelMapper 를 위한 기본 생성자 생성 public IngredientResponse() {} - // 생성자 - public IngredientResponse(long ingredientManagementPk, String ingredientName, String expirationDate, String registrationDate, int seasonDate) { - this.ingredientManagementPk = ingredientManagementPk; - this.ingredientName = ingredientName; - this.expirationDate = expirationDate; - this.registrationDate = registrationDate; - this.seasonDate = seasonDate; - } } diff --git a/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientManagementRepository.java b/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientManagementRepository.java index 7a6e9f3..4278b26 100644 --- a/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientManagementRepository.java +++ b/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientManagementRepository.java @@ -6,5 +6,6 @@ @Repository public interface IngredientManagementRepository extends JpaRepository { + } 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 45d10c0..8dcff37 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java @@ -1,6 +1,7 @@ package moja.refrigerator.service.ingredient; import moja.refrigerator.dto.ingredient.request.IngredientCreateRequest; +import moja.refrigerator.dto.ingredient.request.IngredientUpdateRequest; import moja.refrigerator.dto.ingredient.response.IngredientResponse; import java.util.List; @@ -8,4 +9,6 @@ public interface IngredientService { void createIngredient(IngredientCreateRequest request); // 재료 등록 메서드 List getIngredient(); // 재료 조회 메서드 + void updateIngredient(IngredientUpdateRequest request); + void deleteIngredient(long ingredientManagementPK); } 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 92465ca..0002328 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java @@ -1,13 +1,14 @@ package moja.refrigerator.service.ingredient; -//import moja.refrigerator.aggregate.ingredient.IngredientCategory; +import moja.refrigerator.aggregate.ingredient.IngredientCategory; import moja.refrigerator.aggregate.ingredient.IngredientManagement; -//import moja.refrigerator.aggregate.ingredient.IngredientStorage; +import moja.refrigerator.aggregate.ingredient.IngredientStorage; import moja.refrigerator.dto.ingredient.request.IngredientCreateRequest; -//import moja.refrigerator.repository.ingredient.IngredientCategoryRepository; +import moja.refrigerator.repository.ingredient.IngredientCategoryRepository; +import moja.refrigerator.dto.ingredient.request.IngredientUpdateRequest; import moja.refrigerator.dto.ingredient.response.IngredientResponse; import moja.refrigerator.repository.ingredient.IngredientManagementRepository; -//import moja.refrigerator.repository.ingredient.IngredientStorageRepository; +import moja.refrigerator.repository.ingredient.IngredientStorageRepository; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,18 +21,18 @@ public class IngredientServiceImpl implements IngredientService{ private IngredientManagementRepository ingredientManagementRepository; -// private IngredientStorageRepository ingredientStorageRepository; -// private IngredientCategoryRepository ingredientCategoryRepository; + private IngredientStorageRepository ingredientStorageRepository; + private IngredientCategoryRepository ingredientCategoryRepository; private ModelMapper mapper; @Autowired public IngredientServiceImpl(IngredientManagementRepository ingredientManagementRepository, -// IngredientStorageRepository ingredientStorageRepository, -// IngredientCategoryRepository ingredientCategoryRepository, + IngredientStorageRepository ingredientStorageRepository, + IngredientCategoryRepository ingredientCategoryRepository, ModelMapper mapper) { this.ingredientManagementRepository = ingredientManagementRepository; -// this.ingredientStorageRepository = ingredientStorageRepository; -// this.ingredientCategoryRepository = ingredientCategoryRepository; + this.ingredientStorageRepository = ingredientStorageRepository; + this.ingredientCategoryRepository = ingredientCategoryRepository; this.mapper = mapper; } @@ -40,14 +41,14 @@ public IngredientServiceImpl(IngredientManagementRepository ingredientManagement public void createIngredient(IngredientCreateRequest request) { IngredientManagement ingredient = mapper.map(request, IngredientManagement.class); -// IngredientCategory category = ingredientCategoryRepository.findById(request.getIngredientCategoryPk()) -// .orElseThrow(() -> new IllegalArgumentException("카테고리를 찾을 수 없습니다.")); -// -// IngredientStorage storage = ingredientStorageRepository.findById(request.getIngredientStoragePk()) -// .orElseThrow(() -> new IllegalArgumentException("저장소를 찾을 수 없습니다.")); -// -// ingredient.setIngredientCategory(category); -// ingredient.setIngredientStorage(storage); + IngredientCategory category = ingredientCategoryRepository.findById(request.getIngredientCategoryPk()) + .orElseThrow(() -> new IllegalArgumentException("카테고리를 찾을 수 없습니다.")); + + IngredientStorage storage = ingredientStorageRepository.findById(request.getIngredientStoragePk()) + .orElseThrow(() -> new IllegalArgumentException("해당 보관 방법을 찾을 수 없습니다.")); + + ingredient.setIngredientCategory(category); + ingredient.setIngredientStorage(storage); // 재료를 JpaRepository의 save() 메소드로 DB에 저장 ! ingredientManagementRepository.save(ingredient); @@ -63,4 +64,40 @@ public List getIngredient() { .collect(Collectors.toList()); } + @Override + @Transactional + public void updateIngredient(IngredientUpdateRequest request) { + // 1. 수정할 재료 조회 + IngredientManagement ingredient = ingredientManagementRepository + .findById(request.getIngredientManagementPk()) + .orElseThrow(() -> new IllegalArgumentException("수정할 재료를 찾을 수 없습니다.")); + + // 2. 새로운 카테고리와 저장소 조회 + IngredientCategory newCategory = ingredientCategoryRepository.findById(request.getIngredientCategoryPk()) + .orElseThrow(() -> new IllegalArgumentException("카테고리를 찾을 수 없습니다.")); + + IngredientStorage newStorage = ingredientStorageRepository.findById(request.getIngredientStoragePk()) + .orElseThrow(() -> new IllegalArgumentException("해당 보관 방법을 찾을 수 없습니다.")); + + // 3. 기본 필드들 업데이트 + ingredient.setIngredientName(request.getIngredientName()); + ingredient.setExpirationDate(request.getExpirationDate()); + ingredient.setRegistrationDate(request.getRegistrationDate()); + ingredient.setSeasonDate(request.getSeasonDate()); + + // 4. 연관관계 설정 + ingredient.setIngredientCategory(newCategory); + ingredient.setIngredientStorage(newStorage); + } + + @Override + @Transactional + public void deleteIngredient(long ingredientManagementPK) { + IngredientManagement ingredient = ingredientManagementRepository + .findById(ingredientManagementPK) + .orElseThrow(() -> new IllegalArgumentException("삭제할 재료를 찾을 수 없습니다.")); + + ingredientManagementRepository.delete(ingredient); + } + }