refactor(catalog): rely on inventory for variant availability

This commit is contained in:
2026-08-14 09:54:40 -03:00
parent 11dbcb4082
commit a919e9366b
4 changed files with 2 additions and 11 deletions

View File

@@ -138,7 +138,6 @@ class CatalogController extends Controller
$variantSelectionService->options(
$catalogItem,
$request->validated('selected_values', []),
array_map('intval', $request->validated('excluded_variant_ids', [])),
$includedVariantId,
)
);

View File

@@ -17,8 +17,6 @@ class CatalogVariantOptionsRequest extends FormRequest
return [
'selected_values' => ['sometimes', 'array'],
'selected_values.*' => ['nullable'],
'excluded_variant_ids' => ['sometimes', 'array'],
'excluded_variant_ids.*' => ['integer', 'min:1', 'distinct'],
'cart_item_id' => ['sometimes', 'nullable', 'integer', 'min:1'],
];
}

View File

@@ -11,13 +11,11 @@ class VariantSelectionService
{
/**
* @param array<string, mixed> $selectedValues
* @param list<int> $excludedVariantIds
* @return array<string, mixed>
*/
public function options(
CatalogItem $catalogItem,
array $selectedValues,
array $excludedVariantIds = [],
?int $includedVariantId = null,
): array {
$catalogItem->load([
@@ -30,10 +28,7 @@ class VariantSelectionService
'variants.definitions.itemAttribute.attribute.options',
]);
$excluded = collect($excludedVariantIds)->map(fn ($id): int => (int) $id);
$variants = $catalogItem->visibleVariants($includedVariantId)
->reject(fn (Variant $variant): bool => $variant->id !== $includedVariantId
&& $excluded->contains($variant->id))
->values();
$normalizedSelections = collect($selectedValues)
->mapWithKeys(fn ($value, string $key): array => [$key => $this->normalizeValue($value)])

View File

@@ -335,15 +335,14 @@ class CatalogItemDetailControllerTest extends TestCase
"/api/tenants/{$tenant->codigo}/catalog-items/{$item->id}/variant-options",
[
'selected_values' => ['sector' => 'A'],
'excluded_variant_ids' => [$second->id],
],
)
->assertOk()
->assertJsonPath('data.valid', true)
->assertJsonPath('data.resolved_variant_id', null)
->assertJsonCount(2, 'data.variants')
->assertJsonCount(3, 'data.variants')
->assertJsonCount(1, 'data.options.sector')
->assertJsonCount(1, 'data.options.seat')
->assertJsonCount(2, 'data.options.seat')
->assertJsonPath('data.options.seat.0.value', '1');
$this->postJson(