feat(catalog): model availability as global decisions

This commit is contained in:
2026-08-25 09:03:04 -03:00
parent d9635d47ba
commit 98bfc0d5e9
13 changed files with 220 additions and 149 deletions

View File

@@ -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\Models\CatalogItem;
use App\Domains\Catalog\Models\ItemAttribute;
@@ -46,7 +45,7 @@ class CatalogItemDetailResource extends JsonResource
),
'variants' => $this->variants
->map(fn (Variant $variant): array => $this->variantData($variant))
->filter(fn (array $variant): bool => $variant['availability']['capabilities']['display'])
->filter(fn (array $variant): bool => $variant['availability']['state'] === 'visible')
->values(),
'selected_variant' => $this->when(
$selectedVariant !== null,
@@ -161,7 +160,7 @@ class CatalogItemDetailResource extends JsonResource
$variantStock = $this->variantStock($variant);
$availability = $this->availability(
$variantStock,
AvailabilitySubject::Variant,
false,
);
return [
@@ -195,12 +194,11 @@ class CatalogItemDetailResource extends JsonResource
/** @return array<string, mixed> */
private function availability(
?int $stock,
AvailabilitySubject $subject = AvailabilitySubject::Product,
bool $includeUserQuota = true,
): array {
return app(CatalogItemAllowanceService::class)->availability(
$stock,
$this->getAttribute('remaining_user_quota'),
$subject,
);
$includeUserQuota ? $this->getAttribute('remaining_user_quota') : null,
)->toArray();
}
}