diff --git a/app/Domains/Cart/Resources/CartItemResource.php b/app/Domains/Cart/Resources/CartItemResource.php index 263f716..ce1ad82 100644 --- a/app/Domains/Cart/Resources/CartItemResource.php +++ b/app/Domains/Cart/Resources/CartItemResource.php @@ -4,7 +4,6 @@ namespace App\Domains\Cart\Resources; use App\Domains\Cart\Models\CartItem; use App\Domains\Catalog\Enums\InventoryPolicy; -use App\Domains\Catalog\Models\Variant; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; @@ -38,16 +37,14 @@ class CartItemResource extends JsonResource 'product' => $selectedItem === null ? null : [ 'nombre' => $selectedItem->getName(), 'imagen' => $imageUrl, - 'variants' => $this->catalogItem->visibleVariants($this->variant_id) - ->map(fn (Variant $variant): array => [ - 'id' => $variant->id, - 'precio' => $this->formatMoney($variant->getPrice()), - 'stock_tecnico' => $this->catalogItem->inventory_policy === InventoryPolicy::Unlimited - ? null - : $variant->inventory->availableStock(), - 'values' => $variant->selectorOptions($this->catalogItem->itemAttributes), - ]) - ->values(), + 'variant' => $this->variant === null ? null : [ + 'id' => $this->variant->id, + 'precio' => $this->formatMoney($this->variant->getPrice()), + 'stock_tecnico' => $this->catalogItem->inventory_policy === InventoryPolicy::Unlimited + ? null + : $this->variant->inventory->availableStock(), + 'values' => $this->variant->selectorOptions($this->catalogItem->itemAttributes), + ], ], ]; } diff --git a/app/Domains/Cart/Services/CartService.php b/app/Domains/Cart/Services/CartService.php index 25ab507..954f784 100644 --- a/app/Domains/Cart/Services/CartService.php +++ b/app/Domains/Cart/Services/CartService.php @@ -108,10 +108,6 @@ class CartService 'items.catalogItem.attachments', 'items.catalogItem.inventory', 'items.catalogItem.itemAttributes.attribute', - 'items.catalogItem.variants.inventory', - 'items.catalogItem.variants.definitions.itemAttribute.attribute.options', - 'items.catalogItem.variants.eventDates', - 'items.catalogItem.variants.eventDate', 'items.variant.attachments', 'items.variant.inventory', 'items.variant.definitions.itemAttribute.attribute.options', diff --git a/app/Domains/Cart/documentacion/README.md b/app/Domains/Cart/documentacion/README.md index f80a34d..2c67b43 100644 --- a/app/Domains/Cart/documentacion/README.md +++ b/app/Domains/Cart/documentacion/README.md @@ -25,7 +25,7 @@ Bajo `/tenants/{tenant:codigo}`: ## Contratos -`AddCartItemRequest` y `UpdateCartItemQuantityRequest` validan selección y cantidad. `CartResource` y `CartItemResource` estabilizan la respuesta pública. +`AddCartItemRequest` y `UpdateCartItemQuantityRequest` validan selección y cantidad. `CartResource` y `CartItemResource` estabilizan la respuesta pública. Cada ítem serializa únicamente su variante seleccionada en `product.variant`; las variantes alternativas no forman parte de la respuesta del carrito. ## Dependencias y reglas diff --git a/tests/Feature/Cart/CartControllerTest.php b/tests/Feature/Cart/CartControllerTest.php index 304ff69..2888c8d 100644 --- a/tests/Feature/Cart/CartControllerTest.php +++ b/tests/Feature/Cart/CartControllerTest.php @@ -276,11 +276,6 @@ class CartControllerTest extends TestCase 'inventory_id' => $secondInventory->id, 'precio' => '20.00', ]); - $unavailableInventory = Inventory::query()->create(['real_stock' => 0]); - $unavailableVariant = $item->variants()->create([ - 'inventory_id' => $unavailableInventory->id, - 'precio' => '25.00', - ]); $createResponse = $this->postJson('/api/tenants/acme/cart/items', [ 'catalog_item_id' => $item->id, 'variant_id' => $firstVariant->id, @@ -301,11 +296,9 @@ class CartControllerTest extends TestCase ->assertOk() ->assertJsonPath('data.items.0.variant_id', $secondVariant->id) ->assertJsonPath('data.items.0.precio_unitario', '20.00') - ->assertJsonCount(2, 'data.items.0.product.variants') - ->assertJsonPath('data.items.0.product.variants.0.id', $firstVariant->id) - ->assertJsonPath('data.items.0.product.variants.1.id', $secondVariant->id) - ->assertJsonPath('data.items.0.product.variants.1.stock_tecnico', 0) - ->assertJsonMissing(['id' => $unavailableVariant->id, 'stock_tecnico' => 0]); + ->assertJsonPath('data.items.0.product.variant.id', $secondVariant->id) + ->assertJsonPath('data.items.0.product.variant.stock_tecnico', 0) + ->assertJsonMissingPath('data.items.0.product.variants'); $this->assertDatabaseHas('inventories', [ 'id' => $firstVariant->inventory_id,