From 79d4861e6d65924ff89492d2dadf10957e44d90b Mon Sep 17 00:00:00 2001 From: Mark Pinkster Date: Sat, 10 Jan 2026 16:12:21 +0100 Subject: [PATCH] Cleanup Datamodel get_products --- api/actions/products.php | 58 +++++++++++++++++++++++++++------------ favicon.ico | Bin 0 -> 15086 bytes 2 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 favicon.ico diff --git a/api/actions/products.php b/api/actions/products.php index 9da7d8c..e4aebfe 100644 --- a/api/actions/products.php +++ b/api/actions/products.php @@ -1,36 +1,55 @@ get('products', ['status' => 'publish', 'per_page' => 100]); + + // Only fetch fields needed for telesales app + $productFields = 'id,name,price,type,upsell_ids,cross_sell_ids'; + $variationFields = 'id,price,attributes'; + + $products = $woocommerce->get('products', [ + 'status' => 'publish', + 'per_page' => 100, + '_fields' => $productFields + ]); + $cuw_map = UpsellService::buildProductMap(); $enriched = []; foreach ($products as $product) { - // Get variations for variable products - $variation_details = ($product->type === 'variable') - ? (array) $woocommerce->get("products/{$product->id}/variations", ['per_page' => 50]) - : []; + // Get variations for variable products (only needed fields) + $variation_details = []; + if ($product->type === 'variable') { + $variation_details = (array) $woocommerce->get( + "products/{$product->id}/variations", + [ + 'per_page' => 50, + '_fields' => $variationFields + ] + ); + } // Combine upsell + cross-sell + CUW IDs - $upsell_ids = !empty($product->upsell_ids) - ? array_map('intval', (array) $product->upsell_ids) + $upsell_ids = !empty($product->upsell_ids) + ? array_map('intval', (array) $product->upsell_ids) : []; - $cross_sell_ids = !empty($product->cross_sell_ids) - ? array_map('intval', (array) $product->cross_sell_ids) + $cross_sell_ids = !empty($product->cross_sell_ids) + ? array_map('intval', (array) $product->cross_sell_ids) : []; $cuw_ids = $cuw_map[(int)$product->id] ?? []; @@ -41,13 +60,18 @@ function handleGetProducts(): void $cuw_ids )))); - // Convert product to array and add fields - $p = (array) $product; - $p['variation_details'] = $variation_details; - $p['cuw_ids'] = $cuw_ids; - $p['recommended_ids'] = $recommended_ids; - - $enriched[] = $p; + // Build minimal product object with only needed fields + $enriched[] = [ + 'id' => (int) $product->id, + 'name' => $product->name, + 'price' => $product->price, + 'type' => $product->type, + 'upsell_ids' => $upsell_ids, + 'cross_sell_ids' => $cross_sell_ids, + 'variation_details' => $variation_details, + 'cuw_ids' => $cuw_ids, + 'recommended_ids' => $recommended_ids + ]; } echo json_encode($enriched); diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..67d63bc1f566e1fe47b22eab81b37f4c497ccaec GIT binary patch literal 15086 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