Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
Original file line number Diff line number Diff line change
@@ -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;

}
Original file line number Diff line number Diff line change
Expand Up @@ -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<IngredientResponse> getIngredient() {
return ingredientService.getIngredient();

public List<IngredientResponse> getIngredient(@RequestParam Long userPk) {
return ingredientService.getIngredient(userPk);
}

// 재료 정보 수정
Expand All @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

}
Original file line number Diff line number Diff line change
Expand Up @@ -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 를 위한 기본 생성자 생성
Expand Down
Original file line number Diff line number Diff line change
@@ -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<IngredientMyRefrigerator, Long> {
// 사용자 PK로 해당 사용자의 냉장고 재료 목록 조회
List<IngredientMyRefrigerator> findByUserUserPk(Long userPk);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<IngredientResponse> getIngredient(); // 재료 조회 메서드
List<IngredientResponse> getIngredient(Long userPk); // 재료 조회 메서드
void updateIngredient(IngredientUpdateRequest request);
void deleteIngredient(long ingredientManagementPk);

void deleteIngredient(long ingredientMyRefrigeratorPk);

List<ResponseUsersIngredientBookmarkLists> getUsersIngredientBookmarkLists(
RequestIngredientBookmarkLists requestBookmarkLists);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -20,95 +16,85 @@
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;

@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<IngredientResponse> getIngredient() {
List<IngredientManagement> ingredients = ingredientManagementRepository.findAll();
public List<IngredientResponse> getIngredient(Long userPk) {
List<IngredientMyRefrigerator> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,4 @@ private void checkDuplicateUser(UserCreateRequest request) {
throw new DuplicateUserException(String.join(", ", errors));
}
}
}
}