From df0f374765ca9dc8fa40e2a0e7e49a00430ec27c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=ED=99=8D=EB=B2=94?= Date: Sat, 14 Dec 2024 20:38:25 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=AC=EB=A3=8C=C3=A3=C2=84fix:CRUD=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ingredient/IngredientManagement.java | 6 -- .../ingredient/IngredientMyRefrigerator.java | 34 +++++++ .../ingredient/IngredientController.java | 16 ++-- .../request/IngredientCreateRequest.java | 6 +- .../request/IngredientUpdateRequest.java | 7 +- .../response/IngredientResponse.java | 8 +- .../IngredientMyRefrigeratorRepository.java | 13 +++ .../service/ingredient/IngredientService.java | 8 +- .../ingredient/IngredientServiceImpl.java | 90 ++++++++----------- .../service/user/UserServiceImpl.java | 2 +- 10 files changed, 106 insertions(+), 84 deletions(-) create mode 100644 refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientMyRefrigerator.java create mode 100644 refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientMyRefrigeratorRepository.java diff --git a/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientManagement.java b/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientManagement.java index 5a9e5bb..dfd453f 100644 --- a/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientManagement.java +++ b/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientManagement.java @@ -16,12 +16,6 @@ public class IngredientManagement { @Column(name = "ingredient_name") private String ingredientName; - @Column(name = "expiration_date") - private String expirationDate; - - @Column(name = "registration_date") - private String registrationDate; - @Column(name = "season_date") private int seasonDate; diff --git a/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientMyRefrigerator.java b/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientMyRefrigerator.java new file mode 100644 index 0000000..c0dc51f --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientMyRefrigerator.java @@ -0,0 +1,34 @@ +package moja.refrigerator.aggregate.ingredient; + +import jakarta.persistence.*; +import lombok.Data; +import moja.refrigerator.aggregate.user.User; + +@Data +@Entity +@Table(name = "tbl_ingredient_my_refrigerator") +public class IngredientMyRefrigerator { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ingredient_my_refrigerator_pk") + private long ingredientMyRefrigeratorPk; + + @ManyToOne + @JoinColumn(name = "user_pk") + private User user; + + @ManyToOne + @JoinColumn(name = "ingredient_management_pk") + private IngredientManagement ingredientManagement; + + @Column(name = "expiration_date") + private String expirationDate; + + @Column(name = "registration_date") + private String registrationDate; + + @Column(name = "ingredient_amount") + private float ingredientAmount; + +} 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 19bf7af..7802d18 100644 --- a/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java +++ b/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java @@ -26,15 +26,17 @@ public IngredientController(IngredientService ingredientService) { // 재료 등록 @PostMapping - public void createIngredient(@RequestBody IngredientCreateRequest request) { - ingredientService.createIngredient(request); + public void createIngredient( + @RequestBody IngredientCreateRequest request, + @RequestParam Long userPk, + @RequestParam Long ingredientManagementPk) { + ingredientService.createIngredient(request, userPk, ingredientManagementPk); } // 재료 조회 @GetMapping - public List getIngredient() { - return ingredientService.getIngredient(); - + public List getIngredient(@RequestParam Long userPk) { + return ingredientService.getIngredient(userPk); } // 재료 정보 수정 @@ -45,8 +47,8 @@ public void updateIngredient(@RequestBody IngredientUpdateRequest request) { // 재료 삭제 @DeleteMapping - public void deleteIngredient(@RequestParam long ingredientManagementPk) { - ingredientService.deleteIngredient(ingredientManagementPk); + public void deleteIngredient(@RequestParam Long ingredientMyRefrigeratorPk) { + ingredientService.deleteIngredient(ingredientMyRefrigeratorPk); } @PostMapping("/bookmark/regist") 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 eacc7e4..e78f743 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 @@ -4,11 +4,9 @@ @Data public class IngredientCreateRequest { - private String ingredientName; + + private float ingredientAmount; 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/request/IngredientUpdateRequest.java b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientUpdateRequest.java index f1abb73..ad2ee5f 100644 --- a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientUpdateRequest.java +++ b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/IngredientUpdateRequest.java @@ -5,12 +5,9 @@ @Data public class IngredientUpdateRequest { - private long ingredientManagementPk; - private String ingredientName; + private long ingredientMyRefrigeratorPk; + private float ingredientAmount; 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 5ce316c..760db5b 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 @@ -4,13 +4,13 @@ @Data public class IngredientResponse { - private long ingredientManagementPk; + + private int number; + private long ingredientMyRefrigeratorPk; private String ingredientName; + private int ingredientAmount; private String expirationDate; - private String registrationDate; private int seasonDate; - // 조회 시에는 pk 말고 이름으로 조회 되도록 - private String ingredientCategory; private String ingredientStorage; // ModelMapper 를 위한 기본 생성자 생성 diff --git a/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientMyRefrigeratorRepository.java b/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientMyRefrigeratorRepository.java new file mode 100644 index 0000000..19561f3 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientMyRefrigeratorRepository.java @@ -0,0 +1,13 @@ +package moja.refrigerator.repository.ingredient; + +import moja.refrigerator.aggregate.ingredient.IngredientMyRefrigerator; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface IngredientMyRefrigeratorRepository extends JpaRepository { + // 사용자 PK로 해당 사용자의 냉장고 재료 목록 조회 + List findByUserUserPk(Long userPk); +} \ No newline at end of file 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 61ba28f..08c701b 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java @@ -9,13 +9,13 @@ import java.util.List; public interface IngredientService { -// void createIngredient(IngredientCreateRequest request); ResponseRegistIngredientBookmark createIngredientBookmark(RequestRegistIngredientBookmark requestBookmark); - void createIngredient(IngredientCreateRequest request); // 재료 등록 메서드 + void createIngredient(IngredientCreateRequest request, Long userPk, Long ingredientManagementPk); // 재료 등록 메서드 - List getIngredient(); // 재료 조회 메서드 + List getIngredient(Long userPk); // 재료 조회 메서드 void updateIngredient(IngredientUpdateRequest request); - void deleteIngredient(long ingredientManagementPk); + void deleteIngredient(long ingredientMyRefrigeratorPk); + } 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 5b7b9e1..0ab0d9b 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java @@ -1,20 +1,14 @@ package moja.refrigerator.service.ingredient; import jakarta.persistence.EntityNotFoundException; -import moja.refrigerator.aggregate.ingredient.IngredientBookmark; -import moja.refrigerator.aggregate.ingredient.IngredientCategory; -import moja.refrigerator.aggregate.ingredient.IngredientManagement; -import moja.refrigerator.aggregate.ingredient.IngredientStorage; +import moja.refrigerator.aggregate.ingredient.*; import moja.refrigerator.aggregate.user.User; import moja.refrigerator.dto.ingredient.request.IngredientCreateRequest; import moja.refrigerator.dto.ingredient.request.IngredientUpdateRequest; import moja.refrigerator.dto.ingredient.request.RequestRegistIngredientBookmark; import moja.refrigerator.dto.ingredient.response.IngredientResponse; import moja.refrigerator.dto.ingredient.response.ResponseRegistIngredientBookmark; -import moja.refrigerator.repository.ingredient.IngredientBookmarkRepository; -import moja.refrigerator.repository.ingredient.IngredientCategoryRepository; -import moja.refrigerator.repository.ingredient.IngredientManagementRepository; -import moja.refrigerator.repository.ingredient.IngredientStorageRepository; +import moja.refrigerator.repository.ingredient.*; import moja.refrigerator.repository.user.UserRepository; import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; @@ -23,94 +17,84 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @Service public class IngredientServiceImpl implements IngredientService{ private IngredientManagementRepository ingredientManagementRepository; - private IngredientStorageRepository ingredientStorageRepository; - private IngredientCategoryRepository ingredientCategoryRepository; private IngredientBookmarkRepository ingredientBookmarkRepository; + private IngredientMyRefrigeratorRepository ingredientMyRefrigeratorRepository; private UserRepository userRepository; private ModelMapper mapper; @Autowired public IngredientServiceImpl(IngredientManagementRepository ingredientManagementRepository, - IngredientStorageRepository ingredientStorageRepository, - IngredientCategoryRepository ingredientCategoryRepository, IngredientBookmarkRepository ingredientBookmarkRepository, + IngredientMyRefrigeratorRepository ingredientMyRefrigeratorRepository, UserRepository userRepository, ModelMapper mapper) { this.ingredientManagementRepository = ingredientManagementRepository; - this.ingredientStorageRepository = ingredientStorageRepository; - this.ingredientCategoryRepository = ingredientCategoryRepository; this.ingredientBookmarkRepository = ingredientBookmarkRepository; + this.ingredientMyRefrigeratorRepository = ingredientMyRefrigeratorRepository; this.userRepository = userRepository; this.mapper = mapper; } @Override @Transactional - public void createIngredient(IngredientCreateRequest request) { - IngredientManagement ingredient = mapper.map(request, IngredientManagement.class); + public void createIngredient(IngredientCreateRequest request, Long userPk, Long ingredientManagementPk) { + IngredientMyRefrigerator myRefrigerator = mapper.map(request, IngredientMyRefrigerator.class); - IngredientCategory category = ingredientCategoryRepository.findById(request.getIngredientCategoryPk()) - .orElseThrow(() -> new IllegalArgumentException("카테고리를 찾을 수 없습니다.")); + User user = userRepository.findById(userPk) + .orElseThrow(() -> new IllegalArgumentException("회원을 찾을 수 없습니다.")); - IngredientStorage storage = ingredientStorageRepository.findById(request.getIngredientStoragePk()) - .orElseThrow(() -> new IllegalArgumentException("해당 보관 방법을 찾을 수 없습니다.")); + IngredientManagement ingredientManagement = ingredientManagementRepository.findById(ingredientManagementPk) + .orElseThrow(() -> new IllegalArgumentException("재료를 찾을 수 없습니다.")); - ingredient.setIngredientCategory(category); - ingredient.setIngredientStorage(storage); + myRefrigerator.setUser(user); + myRefrigerator.setIngredientManagement(ingredientManagement); // 재료를 JpaRepository의 save() 메소드로 DB에 저장 ! - ingredientManagementRepository.save(ingredient); + ingredientMyRefrigeratorRepository.save(myRefrigerator); } @Transactional(readOnly = true) - public List getIngredient() { - List ingredients = ingredientManagementRepository.findAll(); + public List getIngredient(Long userPk) { + List ingredients = ingredientMyRefrigeratorRepository.findByUserUserPk(userPk); + + AtomicInteger counter = new AtomicInteger(1); return ingredients.stream() - .map(ingredient -> mapper.map(ingredient, IngredientResponse.class)) + .map(ingredient -> { + IngredientResponse response = mapper.map(ingredient, IngredientResponse.class); + response.setNumber(counter.getAndIncrement()); + response.setIngredientName(ingredient.getIngredientManagement().getIngredientName()); + response.setSeasonDate(ingredient.getIngredientManagement().getSeasonDate()); + response.setIngredientStorage(ingredient.getIngredientManagement().getIngredientStorage().getIngredientStorage()); + return response; + }) .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); + IngredientMyRefrigerator ingredient = ingredientMyRefrigeratorRepository + .findById(request.getIngredientMyRefrigeratorPk()) + .orElseThrow(() -> new EntityNotFoundException("수정할 재료를 찾을 수 없습니다.")); + + mapper.map(request, ingredient); } @Override @Transactional - public void deleteIngredient(long ingredientManagementPk) { - IngredientManagement ingredient = ingredientManagementRepository - .findById(ingredientManagementPk) - .orElseThrow(() -> new IllegalArgumentException("삭제할 재료를 찾을 수 없습니다.")); - - ingredientManagementRepository.delete(ingredient); + public void deleteIngredient(long ingredientMyRefrigeratorPk) { + if (!ingredientMyRefrigeratorRepository.existsById(ingredientMyRefrigeratorPk)) { + throw new EntityNotFoundException("삭제할 재료를 찾을 수 없습니다."); + } + ingredientMyRefrigeratorRepository.deleteById(ingredientMyRefrigeratorPk); } @Override diff --git a/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java b/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java index 4413f85..0fbf06a 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java @@ -13,4 +13,4 @@ public UserServiceImpl(UserRepository userRepository, BCryptPasswordEncoder pass this.userRepository = userRepository; this.passwordEncoder = passwordEncoder; } -} +} \ No newline at end of file