From 06aef93d24c772f2aab2b0facdc4086a781f5ce2 Mon Sep 17 00:00:00 2001 From: team2 Date: Sat, 25 Apr 2026 21:27:46 +0200 Subject: [PATCH] fix sse error handling if shop api error part 5 --- src/Shopware/ShopwareCriteriaBuilder.php | 63 +++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/src/Shopware/ShopwareCriteriaBuilder.php b/src/Shopware/ShopwareCriteriaBuilder.php index 7645a04..f479761 100644 --- a/src/Shopware/ShopwareCriteriaBuilder.php +++ b/src/Shopware/ShopwareCriteriaBuilder.php @@ -60,11 +60,72 @@ final class ShopwareCriteriaBuilder grouping: $grouping, includeRichTextFields: false, includeMediaFields: false, - includeSeoUrls: true, + includeSeoUrls: false, includeManufacturer: false ); } + /** + * Builds an ultra-safe Store API payload for the final recovery attempt. + * It keeps only identity, availability and price fields and intentionally + * avoids grouping, associations, translated text, SEO, media and custom data. + */ + public function buildUltraSafe( + CommerceSearchQuery $query, + ?int $limit = 25, + ?bool $grouping = false + ): array + { + $criteria = [ + 'page' => 1, + 'limit' => max(1, $limit), + 'total-count-mode' => 0, + 'includes' => [ + 'product' => [ + 'id', + 'productNumber', + 'available', + 'calculatedPrice', + ], + 'calculated_price' => [ + 'unitPrice', + 'totalPrice', + 'referencePrice', + 'listPrice', + 'regulationPrice', + ], + ], + 'associations' => [], + ]; + + if ($query->searchText !== '') { + $criteria['search'] = $query->searchText; + } + + if ($query->priceMin !== null) { + $criteria['min-price'] = $query->priceMin; + } + + if ($query->priceMax !== null) { + $criteria['max-price'] = $query->priceMax; + } + + $criteria['filter'] = [ + [ + 'type' => 'equals', + 'field' => 'active', + 'value' => true, + ], + [ + 'type' => 'equals', + 'field' => 'available', + 'value' => true, + ], + ]; + + return $criteria; + } + private function buildCriteria( CommerceSearchQuery $query, ?int $limit,