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 a938468..d791df5 100644 --- a/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java +++ b/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java @@ -23,15 +23,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); } // 재료 정보 수정 @@ -42,8 +44,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 a69f1e3..3c237e8 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java @@ -6,15 +6,15 @@ 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); 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 ea05b5e..13cf998 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java @@ -1,17 +1,13 @@ 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.repository.ingredient.*; + import moja.refrigerator.dto.ingredient.request.*; import moja.refrigerator.dto.ingredient.response.*; -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.user.UserRepository; import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; @@ -20,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.Optional; import java.util.stream.Collectors; @@ -27,88 +24,77 @@ 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 21ff0bd..b52fd64 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java @@ -55,4 +55,4 @@ private void checkDuplicateUser(UserCreateRequest request) { throw new DuplicateUserException(String.join(", ", errors)); } } -} +} \ No newline at end of file