feat(catalog): model availability as global decisions
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
|
||||
namespace App\Domains\Catalog\Resources;
|
||||
|
||||
use App\Domains\Catalog\Enums\AvailabilitySubject;
|
||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
||||
use App\Domains\Catalog\Enums\ProductLayout;
|
||||
use App\Domains\Catalog\Models\CatalogItem;
|
||||
@@ -39,20 +38,13 @@ class CatalogFeaturedItemResource extends JsonResource
|
||||
'nombre' => $catalogItem->nombre,
|
||||
'descripcion' => $catalogItem->descripcion,
|
||||
'precio' => $catalogItem->precio,
|
||||
'availability' => $this->availability(
|
||||
$availableStock,
|
||||
$remainingUserQuota,
|
||||
),
|
||||
'availability' => $this->availability($availableStock, $remainingUserQuota),
|
||||
'variants' => $catalogItem->variants
|
||||
->map(function (Variant $variant) use ($catalogItem, $remainingUserQuota): array {
|
||||
->map(function (Variant $variant) use ($catalogItem): array {
|
||||
$variantStock = $catalogItem->inventory_policy === InventoryPolicy::Unlimited
|
||||
? null
|
||||
: $variant->inventory->availableStock();
|
||||
$availability = $this->availability(
|
||||
$variantStock,
|
||||
$remainingUserQuota,
|
||||
AvailabilitySubject::Variant,
|
||||
);
|
||||
$availability = $this->availability($variantStock, null);
|
||||
|
||||
return [
|
||||
'id' => $variant->id,
|
||||
@@ -66,7 +58,7 @@ class CatalogFeaturedItemResource extends JsonResource
|
||||
'values' => $variant->selectorOptions($catalogItem->itemAttributes),
|
||||
];
|
||||
})
|
||||
->filter(fn (array $variant): bool => $variant['availability']['capabilities']['display'])
|
||||
->filter(fn (array $variant): bool => $variant['availability']['state'] === 'visible')
|
||||
->values(),
|
||||
];
|
||||
|
||||
@@ -120,9 +112,9 @@ class CatalogFeaturedItemResource extends JsonResource
|
||||
private function availability(
|
||||
?int $stock,
|
||||
?int $remainingUserQuota,
|
||||
AvailabilitySubject $subject = AvailabilitySubject::Product,
|
||||
): array {
|
||||
return app(CatalogItemAllowanceService::class)
|
||||
->availability($stock, $remainingUserQuota, $subject);
|
||||
->availability($stock, $remainingUserQuota)
|
||||
->toArray();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user