From 46b0258c8cfb11afa61c265d82ba599843ad62f7 Mon Sep 17 00:00:00 2001 From: Khanh Du <110228244+khanhduzz@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:13:28 +0700 Subject: [PATCH] [Product] Fix error when remove images when create, update product, category (#1015) * fix remove images when update product * fix create, update category image * restore product service with checkstyle --- backoffice/modules/catalog/components/CategoryImage.tsx | 2 ++ backoffice/pages/catalog/categories/[id]/edit.tsx | 1 + .../yas/product/repository/ProductImageRepository.java | 9 +++++++++ .../java/com/yas/product/service/ProductService.java | 5 +++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/backoffice/modules/catalog/components/CategoryImage.tsx b/backoffice/modules/catalog/components/CategoryImage.tsx index d419f43bf4..32d3372cb2 100644 --- a/backoffice/modules/catalog/components/CategoryImage.tsx +++ b/backoffice/modules/catalog/components/CategoryImage.tsx @@ -50,6 +50,8 @@ const CategoryImage = ({ id, image, setValue }: CategoryImageProps) => { const onDeleteImage = () => { setImageURL(null); + setValue('categoryImage', undefined); + setValue('imageId', undefined); }; return ( diff --git a/backoffice/pages/catalog/categories/[id]/edit.tsx b/backoffice/pages/catalog/categories/[id]/edit.tsx index 3069f277ce..36e6a5ed71 100644 --- a/backoffice/pages/catalog/categories/[id]/edit.tsx +++ b/backoffice/pages/catalog/categories/[id]/edit.tsx @@ -147,6 +147,7 @@ const CategoryEdit: NextPage = () => { const onDeleteImage = () => { setCategoryImage(null); + setImageId(undefined); }; return ( diff --git a/product/src/main/java/com/yas/product/repository/ProductImageRepository.java b/product/src/main/java/com/yas/product/repository/ProductImageRepository.java index e467e19444..a002855a23 100644 --- a/product/src/main/java/com/yas/product/repository/ProductImageRepository.java +++ b/product/src/main/java/com/yas/product/repository/ProductImageRepository.java @@ -3,9 +3,18 @@ import com.yas.product.model.ProductImage; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository public interface ProductImageRepository extends JpaRepository { + + @Modifying + @Query("DELETE FROM ProductImage p WHERE p.product.id = :productId AND p.imageId IN :imageIds") void deleteByImageIdInAndProductId(List imageIds, Long productId); + + @Modifying + @Query("DELETE FROM ProductImage p WHERE p.product.id = :productId") + void deleteByProductId(Long productId); } diff --git a/product/src/main/java/com/yas/product/service/ProductService.java b/product/src/main/java/com/yas/product/service/ProductService.java index 0e89ba9531..c5e5de946e 100644 --- a/product/src/main/java/com/yas/product/service/ProductService.java +++ b/product/src/main/java/com/yas/product/service/ProductService.java @@ -536,18 +536,19 @@ private static void setValuesForVariantExisting( public List setProductImages(List imageMediaIds, Product product) { List productImages = new ArrayList<>(); if (CollectionUtils.isEmpty(imageMediaIds)) { + productImageRepository.deleteByProductId(product.getId()); return productImages; } if (product.getProductImages() == null) { productImages = imageMediaIds.stream() - .map(id -> ProductImage.builder().imageId(id).product(product).build()).toList(); + .map(id -> ProductImage.builder().imageId(id).product(product).build()).toList(); } else { List productImageIds = product.getProductImages().stream().map(ProductImage::getImageId).toList(); List newImageIds = imageMediaIds.stream().filter(id -> !productImageIds.contains(id)).toList(); List deletedImageIds = productImageIds.stream().filter(id -> !imageMediaIds.contains(id)).toList(); if (CollectionUtils.isNotEmpty(newImageIds)) { productImages = newImageIds.stream() - .map(id -> ProductImage.builder().imageId(id).product(product).build()).toList(); + .map(id -> ProductImage.builder().imageId(id).product(product).build()).toList(); } if (CollectionUtils.isNotEmpty(deletedImageIds)) { productImageRepository.deleteByImageIdInAndProductId(deletedImageIds, product.getId());