diff --git a/src/main/java/com/DecodEat/domain/products/entity/RawMaterial/RawMaterial.java b/src/main/java/com/DecodEat/domain/products/entity/RawMaterial/RawMaterial.java index 4915a1e..176b8ff 100644 --- a/src/main/java/com/DecodEat/domain/products/entity/RawMaterial/RawMaterial.java +++ b/src/main/java/com/DecodEat/domain/products/entity/RawMaterial/RawMaterial.java @@ -14,7 +14,7 @@ public class RawMaterial { // 원재료 데이터베이스 @GeneratedValue(strategy = GenerationType.IDENTITY) private Long rawMaterialId; - @Column(unique = true, nullable = false) + @Column(nullable = false) private String name; @Enumerated(EnumType.STRING) diff --git a/src/main/java/com/DecodEat/domain/products/repository/RawMaterialRepository.java b/src/main/java/com/DecodEat/domain/products/repository/RawMaterialRepository.java index a9faae7..762b288 100644 --- a/src/main/java/com/DecodEat/domain/products/repository/RawMaterialRepository.java +++ b/src/main/java/com/DecodEat/domain/products/repository/RawMaterialRepository.java @@ -4,9 +4,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import java.util.Optional; +import java.util.List; @Repository public interface RawMaterialRepository extends JpaRepository { - Optional findByName(String name); + List findByName(String name); } \ No newline at end of file diff --git a/src/main/java/com/DecodEat/domain/products/service/ProductService.java b/src/main/java/com/DecodEat/domain/products/service/ProductService.java index 726902d..cfe0bcf 100644 --- a/src/main/java/com/DecodEat/domain/products/service/ProductService.java +++ b/src/main/java/com/DecodEat/domain/products/service/ProductService.java @@ -283,24 +283,34 @@ private void saveIngredients(Product product, List ingredientNames) { for (String ingredientName : ingredientNames) { if (ingredientName != null && !ingredientName.trim().isEmpty()) { + String trimmedIngredientName = ingredientName.trim(); // 원재료가 이미 존재하는지 확인 - RawMaterial rawMaterial = rawMaterialRepository.findByName(ingredientName.trim()) - .orElseGet(() -> { - // 새로운 원재료 생성 (기본 카테고리는 OTHERS) - RawMaterial newRawMaterial = RawMaterial.builder() - .name(ingredientName.trim()) - .category(RawMaterialCategory.OTHERS) - .build(); - return rawMaterialRepository.save(newRawMaterial); - }); - - // 상품-원재료 관계 생성 - ProductRawMaterial productRawMaterial = ProductRawMaterial.builder() - .product(product) - .rawMaterial(rawMaterial) - .build(); - - productRawMaterialRepository.save(productRawMaterial); + List rawMaterials = rawMaterialRepository.findByName(trimmedIngredientName); + + if (rawMaterials.isEmpty()) { + // 새로운 원재료 생성 (기본 카테고리는 OTHERS) + RawMaterial newRawMaterial = RawMaterial.builder() + .name(trimmedIngredientName) + .category(RawMaterialCategory.OTHERS) + .build(); + rawMaterialRepository.save(newRawMaterial); + + // 상품-원재료 관계 생성 + ProductRawMaterial productRawMaterial = ProductRawMaterial.builder() + .product(product) + .rawMaterial(newRawMaterial) + .build(); + productRawMaterialRepository.save(productRawMaterial); + } else { + // 모든 조회된 원재료에 대해 상품-원재료 관계 생성 + for (RawMaterial rawMaterial : rawMaterials) { + ProductRawMaterial productRawMaterial = ProductRawMaterial.builder() + .product(product) + .rawMaterial(rawMaterial) + .build(); + productRawMaterialRepository.save(productRawMaterial); + } + } } } }