feat(catalog): scope availability policies by subject

This commit is contained in:
2026-08-24 15:15:47 -03:00
parent a73b628bb4
commit 2323994f30
7 changed files with 126 additions and 32 deletions

View File

@@ -2,6 +2,7 @@
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;
@@ -47,6 +48,11 @@ class CatalogFeaturedItemResource extends JsonResource
$variantStock = $catalogItem->inventory_policy === InventoryPolicy::Unlimited
? null
: $variant->inventory->availableStock();
$availability = $this->availability(
$variantStock,
$remainingUserQuota,
AvailabilitySubject::Variant,
);
return [
'id' => $variant->id,
@@ -56,14 +62,11 @@ class CatalogFeaturedItemResource extends JsonResource
'event_dates' => $variant->selectedEventDates()->map(fn ($eventDate): string => $eventDate->date->format('Y-m-d'))->values(),
'descripcion' => $variant->getDescription(),
'precio' => number_format($variant->getPrice(), 2, '.', ''),
'availability' => $this->availability(
$variantStock,
$remainingUserQuota,
'variant',
),
'availability' => $availability,
'values' => $variant->selectorOptions($catalogItem->itemAttributes),
];
})
->filter(fn (array $variant): bool => $variant['availability']['capabilities']['display'])
->values(),
];
@@ -117,9 +120,9 @@ class CatalogFeaturedItemResource extends JsonResource
private function availability(
?int $stock,
?int $remainingUserQuota,
string $scope = 'product',
AvailabilitySubject $subject = AvailabilitySubject::Product,
): array {
return app(CatalogItemAllowanceService::class)
->availability($stock, $remainingUserQuota, $scope);
->availability($stock, $remainingUserQuota, $subject);
}
}