From e631ae2953007401e593409f47ea170d77c25996 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Mon, 6 Apr 2026 21:01:20 -0600 Subject: [PATCH] scope inventory lookup by store on sale --- .../petshop/backend/repository/InventoryRepository.java | 3 +++ .../java/com/petshop/backend/service/SaleService.java | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/petshop/backend/repository/InventoryRepository.java b/backend/src/main/java/com/petshop/backend/repository/InventoryRepository.java index 69ff16ed..b448b497 100644 --- a/backend/src/main/java/com/petshop/backend/repository/InventoryRepository.java +++ b/backend/src/main/java/com/petshop/backend/repository/InventoryRepository.java @@ -16,6 +16,9 @@ public interface InventoryRepository extends JpaRepository { @Query("SELECT i FROM Inventory i WHERE i.product.prodId = :productId") Optional findByProductId(@Param("productId") Long productId); + @Query("SELECT i FROM Inventory i WHERE i.product.prodId = :productId AND i.store.storeId = :storeId") + Optional findByProductIdAndStoreId(@Param("productId") Long productId, @Param("storeId") Long storeId); + @Query("SELECT i FROM Inventory i LEFT JOIN i.store s WHERE " + "LOWER(i.product.prodName) LIKE LOWER(CONCAT('%', :q, '%')) OR " + "LOWER(i.product.category.categoryName) LIKE LOWER(CONCAT('%', :q, '%')) OR " + diff --git a/backend/src/main/java/com/petshop/backend/service/SaleService.java b/backend/src/main/java/com/petshop/backend/service/SaleService.java index 643cfc2a..c90ad659 100644 --- a/backend/src/main/java/com/petshop/backend/service/SaleService.java +++ b/backend/src/main/java/com/petshop/backend/service/SaleService.java @@ -134,8 +134,8 @@ public class SaleService { " for product: " + product.getProdName()); } - Inventory inventory = inventoryRepository.findByProductId(itemRequest.getProdId()) - .orElseThrow(() -> new ResourceNotFoundException("Inventory not found for product " + itemRequest.getProdId())); + Inventory inventory = inventoryRepository.findByProductIdAndStoreId(itemRequest.getProdId(), store.getStoreId()) + .orElseThrow(() -> new ResourceNotFoundException("Inventory not found for product " + itemRequest.getProdId() + " at store " + store.getStoreId())); inventory.setQuantity(inventory.getQuantity() + itemRequest.getQuantity()); inventoryRepository.save(inventory); @@ -158,8 +158,8 @@ public class SaleService { Product product = productRepository.findById(itemRequest.getProdId()) .orElseThrow(() -> new ResourceNotFoundException("Product not found with id: " + itemRequest.getProdId())); - Inventory inventory = inventoryRepository.findByProductId(itemRequest.getProdId()) - .orElseThrow(() -> new ResourceNotFoundException("Inventory not found for product " + itemRequest.getProdId())); + Inventory inventory = inventoryRepository.findByProductIdAndStoreId(itemRequest.getProdId(), store.getStoreId()) + .orElseThrow(() -> new ResourceNotFoundException("Inventory not found for product " + itemRequest.getProdId() + " at store " + store.getStoreId())); if (inventory.getQuantity() < itemRequest.getQuantity()) { throw new BusinessException("Insufficient stock for product: " + product.getProdName() +