From 0a90b5102a6b7606d41771ec5e915f0543e64607 Mon Sep 17 00:00:00 2001 From: Domonkos <162434141+domonkosszer@users.noreply.github.com> Date: Tue, 20 Jan 2026 23:28:48 +0100 Subject: [PATCH] the whole inventory can be called now by one class. Inventory Overview Row. Returns the whole inventory --- .../src/main/java/com/voyage/cookies.txt | 2 +- .../inventory/InventoryController.java | 10 +++++++ .../inventory/InventoryOverviewRow.java | 14 ++++++++++ .../workspace/products/SkuController.java | 2 +- .../workspace/products/SkuRepository.java | 28 +++++++++++++++++++ 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 apps/workspace-api/src/main/java/com/voyage/workspace/inventory/InventoryOverviewRow.java diff --git a/apps/workspace-api/src/main/java/com/voyage/cookies.txt b/apps/workspace-api/src/main/java/com/voyage/cookies.txt index acd4db5..4581aad 100644 --- a/apps/workspace-api/src/main/java/com/voyage/cookies.txt +++ b/apps/workspace-api/src/main/java/com/voyage/cookies.txt @@ -2,4 +2,4 @@ # https://curl.se/docs/http-cookies.html # This file was generated by libcurl! Edit at your own risk. -#HttpOnly_localhost FALSE / FALSE 0 JSESSIONID 2DEB364C8E88DCC03042A328A4610233 +#HttpOnly_localhost FALSE / FALSE 0 JSESSIONID 1D763BECEF84ECD1D335BF07E96D3691 diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/inventory/InventoryController.java b/apps/workspace-api/src/main/java/com/voyage/workspace/inventory/InventoryController.java index 8b005db..5c06961 100644 --- a/apps/workspace-api/src/main/java/com/voyage/workspace/inventory/InventoryController.java +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/inventory/InventoryController.java @@ -4,6 +4,8 @@ import com.voyage.workspace.products.SkuRepository; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/api/inventory") public class InventoryController { @@ -34,4 +36,12 @@ public class InventoryController { public int getCurrentStock(@PathVariable Long skuId) { return movementRepo.currentStock(skuId); } + + @GetMapping("/overview") + public List overview( + @RequestParam(required = false) String category, + @RequestParam(required = false) Boolean active + ) { + return skuRepo.inventoryOverview(category, active); + } } \ No newline at end of file diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/inventory/InventoryOverviewRow.java b/apps/workspace-api/src/main/java/com/voyage/workspace/inventory/InventoryOverviewRow.java new file mode 100644 index 0000000..ddd5876 --- /dev/null +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/inventory/InventoryOverviewRow.java @@ -0,0 +1,14 @@ +package com.voyage.workspace.inventory; + +import java.math.BigDecimal; + +public record InventoryOverviewRow( + Long skuId, + String skuCode, + String productName, + String category, + String size, + String color, + BigDecimal price, + long currentStock +) {} \ No newline at end of file diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/products/SkuController.java b/apps/workspace-api/src/main/java/com/voyage/workspace/products/SkuController.java index a0d2747..1b92cf2 100644 --- a/apps/workspace-api/src/main/java/com/voyage/workspace/products/SkuController.java +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/products/SkuController.java @@ -39,4 +39,4 @@ public class SkuController { return ResponseEntity.ok(skuRepo.save(sku)); } -} \ No newline at end of file +} diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/products/SkuRepository.java b/apps/workspace-api/src/main/java/com/voyage/workspace/products/SkuRepository.java index 807c326..81036cf 100644 --- a/apps/workspace-api/src/main/java/com/voyage/workspace/products/SkuRepository.java +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/products/SkuRepository.java @@ -1,11 +1,39 @@ package com.voyage.workspace.products; +import com.voyage.workspace.inventory.InventoryOverviewRow; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; import java.util.Optional; public interface SkuRepository extends JpaRepository { + List findByProductId(Long productId); Optional findBySkuCode(String skuCode); + + @Query(""" + select new com.voyage.workspace.inventory.InventoryOverviewRow( + s.id, + s.skuCode, + p.name, + p.category, + s.size, + s.color, + s.price, + coalesce(sum(m.delta), 0L) + ) + from Sku s + join s.product p + left join InventoryMovement m on m.sku = s + where (:category is null or p.category = :category) + and (:active is null or s.active = :active) + group by s.id, s.skuCode, p.name, p.category, s.size, s.color, s.price + order by p.name asc, s.skuCode asc + """) + List inventoryOverview( + @Param("category") String category, + @Param("active") Boolean active + ); } \ No newline at end of file