From 8dd3946d1b5159085a51907b291c48f36185bb48 Mon Sep 17 00:00:00 2001 From: HongGit Date: Tue, 14 Jan 2025 18:18:35 +0900 Subject: [PATCH] =?UTF-8?q?[FIX]=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20?= =?UTF-8?q?=EC=8B=9C=ED=80=80=EC=8A=A4=20=EC=A1=B0=EC=A0=95=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/api/repository/ProductRepository.java | 5 +++++ .../server/api/service/ProductService.java | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/rootandfruit/server/api/repository/ProductRepository.java b/src/main/java/com/rootandfruit/server/api/repository/ProductRepository.java index 0e97305..780fbd3 100644 --- a/src/main/java/com/rootandfruit/server/api/repository/ProductRepository.java +++ b/src/main/java/com/rootandfruit/server/api/repository/ProductRepository.java @@ -34,4 +34,9 @@ default Product findProductByIdOrThrow(Long id) { @Query("SELECT COALESCE(MAX(p.sequence), 0) FROM Product p WHERE p.isTrial = :isTrial") int findMaxSequenceByIsTrial(@Param("isTrial") boolean isTrial); + + @Modifying + @Query("UPDATE Product p SET p.sequence = p.sequence - 1 " + + "WHERE p.isDeleted = false AND p.isTrial = :isTrial AND p.sequence > :deletedSequence") + void decrementSequenceAfterDeletion(@Param("isTrial") boolean isTrial, @Param("deletedSequence") int deletedSequence); } diff --git a/src/main/java/com/rootandfruit/server/api/service/ProductService.java b/src/main/java/com/rootandfruit/server/api/service/ProductService.java index 68e390b..3c04c8e 100644 --- a/src/main/java/com/rootandfruit/server/api/service/ProductService.java +++ b/src/main/java/com/rootandfruit/server/api/service/ProductService.java @@ -108,13 +108,18 @@ public void delete(List productIds) { if (products.isEmpty()) { throw new CustomException(ErrorType.NOT_FOUND_PRODUCT_ERROR); } - products.forEach(Product::deleteProduct); + + products.forEach(product -> { + int deletedSequence = product.getSequence(); + boolean isTrial = product.isTrial(); + product.deleteProduct(); + productRepository.decrementSequenceAfterDeletion(isTrial, deletedSequence); + }); } @Transactional public void updateProductSequence(Long productId, int currentSequence, int newSequence) { - Product product = productRepository.findById(productId) - .orElseThrow(() -> new IllegalArgumentException("Product not found with id: " + productId)); + Product product = productRepository.findProductByIdOrThrow(productId); if (currentSequence < newSequence) { productRepository.decrementSequenceRange(currentSequence, newSequence);