diff --git a/orders-backend/src/main/java/com/andwati/orders/repository/InventoryItemRepository.java b/orders-backend/src/main/java/com/andwati/orders/repository/InventoryItemRepository.java new file mode 100644 index 0000000..19fc29a --- /dev/null +++ b/orders-backend/src/main/java/com/andwati/orders/repository/InventoryItemRepository.java @@ -0,0 +1,46 @@ +package com.andwati.orders.repository; + +import com.andwati.orders.model.InventoryItem; +import jakarta.persistence.LockModeType; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface InventoryItemRepository extends JpaRepository { + + @Query(""" + select inventory + from InventoryItem inventory + join fetch inventory.product product + order by product.name asc + """) + List findAllWithProducts(); + + @Query(""" + select inventory + from InventoryItem inventory + join fetch inventory.product product + where inventory.availableQuantity < :threshold + order by inventory.availableQuantity asc, product.name asc + """) + List findLowStockItems(@Param("threshold") int threshold); + + Optional findByProduct_Id(UUID productId); + + List findByProduct_IdIn(Collection productIds); + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query(""" + select inventory + from InventoryItem inventory + join fetch inventory.product product + where product.id in :productIds + """) + List findByProductIdsForUpdate(@Param("productIds") Collection productIds); +} \ No newline at end of file diff --git a/orders-backend/src/main/java/com/andwati/orders/repository/OrderItemRepository.java b/orders-backend/src/main/java/com/andwati/orders/repository/OrderItemRepository.java new file mode 100644 index 0000000..a40330f --- /dev/null +++ b/orders-backend/src/main/java/com/andwati/orders/repository/OrderItemRepository.java @@ -0,0 +1,9 @@ +package com.andwati.orders.repository; + +import com.andwati.orders.model.OrderItem; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.UUID; + +public interface OrderItemRepository extends JpaRepository { +} \ No newline at end of file diff --git a/orders-backend/src/main/java/com/andwati/orders/repository/OrderRepository.java b/orders-backend/src/main/java/com/andwati/orders/repository/OrderRepository.java new file mode 100644 index 0000000..6ed51b0 --- /dev/null +++ b/orders-backend/src/main/java/com/andwati/orders/repository/OrderRepository.java @@ -0,0 +1,15 @@ +package com.andwati.orders.repository; + +import com.andwati.orders.model.Order; +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.Optional; +import java.util.UUID; + +public interface OrderRepository extends JpaRepository, JpaSpecificationExecutor { + + @EntityGraph(attributePaths = {"items", "items.product"}) + Optional findWithItemsById(UUID id); +} \ No newline at end of file diff --git a/orders-backend/src/main/java/com/andwati/orders/repository/ProductRepository.java b/orders-backend/src/main/java/com/andwati/orders/repository/ProductRepository.java new file mode 100644 index 0000000..25ff8cd --- /dev/null +++ b/orders-backend/src/main/java/com/andwati/orders/repository/ProductRepository.java @@ -0,0 +1,13 @@ +package com.andwati.orders.repository; + +import com.andwati.orders.model.Product; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +public interface ProductRepository extends JpaRepository { + + List findByIdIn(Collection ids); +} \ No newline at end of file