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\Variant;
@@ -37,7 +36,7 @@ class CatalogSearchItemResource extends JsonResource
: $variant->inventory?->availableStock();
$availability = $this->availability(
$variantStock,
AvailabilitySubject::Variant,
false,
);
return [
@@ -52,7 +51,7 @@ class CatalogSearchItemResource extends JsonResource
'values' => $variant->selectorOptions($this->itemAttributes),
];
})
->filter(fn (array $variant): bool => $variant['availability']['capabilities']['display'])
->filter(fn (array $variant): bool => $variant['availability']['state'] === 'visible')
->values(),
];
}
@@ -60,12 +59,11 @@ class CatalogSearchItemResource 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();
}
}