Feat: Updates to Product Indexer, Shopify Importer, Adding cascade delete on reviews
This commit is contained in:
@@ -27,8 +27,14 @@ use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||
* - slugs (every locale's Url::slug for the product, filterable) — lets
|
||||
* ProductService::getBySlug() resolve a product from the index directly, with
|
||||
* no database read at all
|
||||
* - skus (every variant's sku, deduplicated, filterable) — same "resolve from the
|
||||
* index alone" reasoning as slugs, for a future SKU-based lookup/filter
|
||||
* - price (cheapest variant, filterable) and full per-variant pricing
|
||||
* - variants: sku, stock, purchasable, option values, prices, media
|
||||
* - variants: sku, gtin, mpn, ean, stock, backorder, unit_quantity, purchasable,
|
||||
* shippable, tax_ref, dimensions (length/width/height/weight/volume, each
|
||||
* {value, unit}), option values, prices, media — the variant's own images
|
||||
* (ProductVariant::images(), separate from the product's gallery below), not
|
||||
* the product's own media repeated per variant
|
||||
* - the full media gallery (not just the single thumbnail Lunar's base indexer sends)
|
||||
* - tags
|
||||
* - reviews: {items: [...], count, average_rating} — items are public-safe fields
|
||||
@@ -83,6 +89,7 @@ class ProductIndexer extends BaseProductIndexer
|
||||
'channel_ids',
|
||||
'in_stock',
|
||||
'recommendations.id',
|
||||
'skus',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -126,6 +133,7 @@ class ProductIndexer extends BaseProductIndexer
|
||||
->values()
|
||||
->all();
|
||||
$data['slugs'] = $model->urls->pluck('slug')->unique()->values()->all();
|
||||
$data['skus'] = $model->variants->pluck('sku')->filter()->unique()->values()->all();
|
||||
$data['tags'] = $model->tags->pluck('value')->all();
|
||||
$data['media'] = $model->media->map(fn (Media $media) => $this->mapMedia($media))->all();
|
||||
$data['variants'] = $model->variants->map(fn (ProductVariant $variant) => $this->mapVariant($variant, $currency))->all();
|
||||
@@ -161,8 +169,22 @@ class ProductIndexer extends BaseProductIndexer
|
||||
return [
|
||||
'id' => $variant->id,
|
||||
'sku' => $variant->sku,
|
||||
'gtin' => $variant->gtin,
|
||||
'mpn' => $variant->mpn,
|
||||
'ean' => $variant->ean,
|
||||
'stock' => $variant->stock,
|
||||
'backorder' => $variant->backorder,
|
||||
'unit_quantity' => $variant->unit_quantity,
|
||||
'purchasable' => $variant->purchasable,
|
||||
'shippable' => $variant->shippable,
|
||||
'tax_ref' => $variant->tax_ref,
|
||||
'dimensions' => [
|
||||
'length' => ['value' => $variant->length_value, 'unit' => $variant->length_unit],
|
||||
'width' => ['value' => $variant->width_value, 'unit' => $variant->width_unit],
|
||||
'height' => ['value' => $variant->height_value, 'unit' => $variant->height_unit],
|
||||
'weight' => ['value' => $variant->weight_value, 'unit' => $variant->weight_unit],
|
||||
'volume' => ['value' => $variant->volume_value, 'unit' => $variant->volume_unit],
|
||||
],
|
||||
'options' => $variant->values->map(fn ($value) => [
|
||||
'option' => $this->translatedName($value->option->name),
|
||||
'handle' => $value->option->handle,
|
||||
|
||||
Reference in New Issue
Block a user