From a72bfe7ce32cd0d81304fd38e3fda98bb12e1d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A4=80=ED=98=B8?= <2171168@hansung.ac.kr> Date: Sat, 20 Sep 2025 14:22:21 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9B=90=EC=9E=AC=EB=A3=8Cdb=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/RawMaterial/RawMaterial.java | 2 +- .../repository/RawMaterialRepository.java | 4 +- .../products/service/ProductService.java | 44 ++++++++++++------- 3 files changed, 30 insertions(+), 20 deletions(-) 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); + } + } } } }