From 63303b61b6810b76cd16e2ad2c72b9e527813c28 Mon Sep 17 00:00:00 2001
From: mrfoxygmfr <mrfoxygmfr@sch9.ru>
Date: Mon, 24 Mar 2025 12:21:40 +0300
Subject: feat(db/dao): new specs for operations

---
 .../db/dao/specs/OperationSpecs.java                   | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/main/java/ru/mrfoxygmfr/warehouse_accounting/db/dao/specs/OperationSpecs.java b/src/main/java/ru/mrfoxygmfr/warehouse_accounting/db/dao/specs/OperationSpecs.java
index 34b9ac5..7b2d6d0 100644
--- a/src/main/java/ru/mrfoxygmfr/warehouse_accounting/db/dao/specs/OperationSpecs.java
+++ b/src/main/java/ru/mrfoxygmfr/warehouse_accounting/db/dao/specs/OperationSpecs.java
@@ -1,5 +1,6 @@
 package ru.mrfoxygmfr.warehouse_accounting.db.dao.specs;
 
+import jakarta.persistence.criteria.*;
 import org.springframework.data.jpa.domain.Specification;
 import ru.mrfoxygmfr.warehouse_accounting.db.models.*;
 
@@ -15,7 +16,20 @@ public class OperationSpecs {
     }
 
     public static Specification<Operation> operationPartnerNameLike(String partnerName) {
-        return (root, _, builder)
-                -> builder.equal(root.get(Operation_.partner).get(Partner_.name), partnerName);
+        return (root, _, builder) -> {
+            Join<Operation, Partner> withPartner = root.join(Operation_.partner);
+            return builder.like(withPartner.get(Partner_.name), "%" + partnerName + "%");
+        };
+    }
+
+    public static Specification<Operation> operationProductsContainsLike(String productName) {
+        return (root, query, builder) -> {
+            assert query != null;
+            Subquery<Product> subquery = query.subquery(Product.class);
+            Root<Product> from = subquery.from(Product.class);
+            subquery.select(from).where(ProductSpecs.productNameLike(productName).toPredicate(from, query, builder));
+            SetJoin<Operation, OperationProduct> withProducts = root.join(Operation_.products);
+            return builder.in(withProducts.get(OperationProduct_.product)).value(subquery);
+        };
     }
 }
-- 
cgit mrf-deployment