@Override public ProductVariantQueryModel<T> variant() { return new ProductVariantQueryModel<>(this, "variant"); }
@Override public ProductVariantQueryModel<T> variants() { return ProductVariantQueryModel.of(this, "variants"); }
public QueryPredicate<T> where(final QueryPredicate<PartialProductVariantQueryModel> embeddedPredicate) { return embedPredicate(embeddedPredicate); }
public QueryPredicate<T> where(final Function<PartialProductVariantQueryModel, QueryPredicate<PartialProductVariantQueryModel>> embeddedPredicate) { return where(embeddedPredicate.apply(PartialProductVariantQueryModel.of())); }
public QueryDsl<Product> bySku(final String sku, final ProductProjectionType type) { final Predicate<PartialProductVariantQueryModel> skuPredicate = ProductVariantQueryModel.get().sku().is(sku); final ProductDataQueryModel<Product> projection = model().masterData().forProjection(type); final Predicate<Product> masterVariantSkuPredicate = projection.masterVariant().where(skuPredicate); final Predicate<Product> variantsSkuPredicate = projection.variants().where(skuPredicate); return withPredicate(masterVariantSkuPredicate.or(variantsSkuPredicate)); } }
@Test public void whereClosure() throws Exception { final ProductVariantQueryModel<String> model = ProductVariantQueryModel.of(null, "foo"); final QueryPredicate<String> normalWay = model.where(EmbeddedProductVariantQueryModel.of().sku().is("x")); final QueryPredicate<String> closureWay = model.where(m -> m.sku().is("x")); assertThat(normalWay.toSphereQuery()).isEqualTo(closureWay.toSphereQuery()).isEqualTo("foo(sku=\"x\")"); } }
@Test public void queryProductsWithAnyDiscount() throws Exception { withUpdateableProductDiscount(client(), (ProductDiscount productDiscount, Product product) -> { final ProductQuery query = ProductQuery.of() .withPredicates(m -> m.id().is(product.getId()) .and(m.masterData().staged().masterVariant().prices().discounted().isPresent())); final Duration maxWaitTime = Duration.ofMinutes(2); final Duration waitBeforeRetry = Duration.ofMillis(500); assertEventually(maxWaitTime, waitBeforeRetry, () -> { final Optional<Product> loadedProduct = client().executeBlocking(query).head(); assertThat(loadedProduct.isPresent()).isTrue(); assertThat(loadedProduct.get().getId()).isEqualTo(product.getId()); }); return productDiscount; }); }
@SuppressWarnings("unchecked") private QueryPredicate<T> where(final QueryPredicate<EmbeddedProductVariantQueryModel> embeddedPredicate) { final WithEmbeddedSharedProductProjectionProductDataQueryModel<T> parent = Optional.ofNullable((WithEmbeddedSharedProductProjectionProductDataQueryModel<T>) getParent()) .orElseThrow(() -> new UnsupportedOperationException("A proper parent model is required.")); return parent.where(m -> m.masterVariant().where(embeddedPredicate).or(m.variants().where(embeddedPredicate))); }
public QueryDsl<Product> bySku(final String sku, final ProductProjectionType type) { final Predicate<PartialProductVariantQueryModel> skuPredicate = ProductVariantQueryModel.get().sku().is(sku); final ProductDataQueryModel<Product> projection = model().masterData().forProjection(type); final Predicate<Product> masterVariantSkuPredicate = projection.masterVariant().where(skuPredicate); final Predicate<Product> variantsSkuPredicate = projection.variants().where(skuPredicate); return withPredicate(masterVariantSkuPredicate.or(variantsSkuPredicate)); } }
@Test public void queryByTiersWithMinimumQuantity() { withProduct(client(), product -> { final ProductQuery productQuery = ProductQuery.of() .withPredicates(m -> m.masterData().current().variants().prices().tiers().minimumQuantity().isGreaterThan(5)) .plusPredicates(m -> m.is(product)); final List<Product> results = client().executeBlocking(productQuery).getResults(); assertThat(results).hasSize(0); }); }
@SuppressWarnings("unchecked") private QueryPredicate<T> where(final QueryPredicate<EmbeddedProductVariantQueryModel> embeddedPredicate) { final WithEmbeddedSharedProductProjectionProductDataQueryModel<T> parent = Optional.ofNullable((WithEmbeddedSharedProductProjectionProductDataQueryModel<T>) getParent()) .orElseThrow(() -> new UnsupportedOperationException("A proper parent model is required.")); return parent.where(m -> m.masterVariant().where(embeddedPredicate).or(m.variants().where(embeddedPredicate))); }
public ProductVariantQueryModel<T> variants() { return new ProductVariantQueryModel<>(this, "variants"); }
@Override public ProductVariantQueryModel<T> masterVariant() { return ProductVariantQueryModel.of(this, "masterVariant"); }
@Test public void queryByTiersWithValue() { withProduct(client(), product -> { final ProductQuery productQuery = ProductQuery.of() .withPredicates(m -> m.masterData().current().variants().prices().tiers().value().currencyCode().is("EUR")) .plusPredicates(m -> m.is(product)); final List<Product> results = client().executeBlocking(productQuery).getResults(); assertThat(results).hasSize(0); }); }
private QueryPredicate<T> where(final QueryPredicate<PartialProductVariantQueryModel> embeddedPredicate) { final ProductDataQueryModelBase<T> parent = Optional.ofNullable((ProductDataQueryModelBase<T>) getParent()) .orElseThrow(() -> new UnsupportedOperationException("A proper parent model is required.")); return parent.where(m -> m.masterVariant().where(embeddedPredicate).or(m.variants().where(embeddedPredicate))); }
public ProductVariantQueryModel<T> masterVariant() { return new ProductVariantQueryModel<>(this, "masterVariant"); }
@Override public ProductVariantQueryModel<T> variant() { return ProductVariantQueryModel.of(this, "variant"); }
default ProductQuery bySku(final String sku, final ProductProjectionType type) { final QueryPredicate<EmbeddedProductVariantQueryModel> skuPredicate = EmbeddedProductVariantQueryModel.of().sku().is(sku); final ProductDataQueryModel<Product> projection = ProductQueryModel.of().masterData().forProjection(type); final QueryPredicate<Product> masterVariantSkuPredicate = projection.masterVariant().where(skuPredicate); final QueryPredicate<Product> variantsSkuPredicate = projection.variants().where(skuPredicate); return withPredicates(masterVariantSkuPredicate.or(variantsSkuPredicate)); } }
public ProductVariantQueryModel<T> variants() { return new ProductVariantQueryModel<>(Optional.of(this), "variants"); }
@Override public ProductVariantQueryModel<T> masterVariant() { return ProductVariantQueryModel.of(this, "masterVariant"); }