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);