refactor(cart): simplify CartItemResource response structure to prioritize selected variant details
This commit is contained in:
@@ -34,17 +34,15 @@ class CartItemResource extends JsonResource
|
|||||||
'precio_unitario' => $this->formatMoney($selectedItem?->getPrice()),
|
'precio_unitario' => $this->formatMoney($selectedItem?->getPrice()),
|
||||||
'catalog_item_id' => $this->catalog_item_id,
|
'catalog_item_id' => $this->catalog_item_id,
|
||||||
'variant_id' => $this->variant_id,
|
'variant_id' => $this->variant_id,
|
||||||
'product' => $selectedItem === null ? null : [
|
'nombre' => $selectedItem?->getName(),
|
||||||
'nombre' => $selectedItem->getName(),
|
'imagen' => $imageUrl,
|
||||||
'imagen' => $imageUrl,
|
'variant' => $this->variant === null ? null : [
|
||||||
'variant' => $this->variant === null ? null : [
|
'id' => $this->variant->id,
|
||||||
'id' => $this->variant->id,
|
'precio' => $this->formatMoney($this->variant->getPrice()),
|
||||||
'precio' => $this->formatMoney($this->variant->getPrice()),
|
'stock_tecnico' => $this->catalogItem->inventory_policy === InventoryPolicy::Unlimited
|
||||||
'stock_tecnico' => $this->catalogItem->inventory_policy === InventoryPolicy::Unlimited
|
? null
|
||||||
? null
|
: $this->variant->inventory->availableStock(),
|
||||||
: $this->variant->inventory->availableStock(),
|
'values' => $this->variant->selectorOptions($this->catalogItem->itemAttributes),
|
||||||
'values' => $this->variant->selectorOptions($this->catalogItem->itemAttributes),
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ Bajo `/tenants/{tenant:codigo}`:
|
|||||||
|
|
||||||
## Contratos
|
## Contratos
|
||||||
|
|
||||||
`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.
|
`AddCartItemRequest` y `UpdateCartItemQuantityRequest` validan selección y cantidad. `CartResource` y `CartItemResource` estabilizan la respuesta pública. Cada ítem expone `nombre`, `imagen` y `precio_unitario` en la raíz, priorizando la variante seleccionada y usando el catálogo base como respaldo. La variante seleccionada se serializa en `variant`; las variantes alternativas no forman parte de la respuesta del carrito.
|
||||||
|
|
||||||
## Dependencias y reglas
|
## Dependencias y reglas
|
||||||
|
|
||||||
|
|||||||
@@ -49,9 +49,12 @@ class CartControllerTest extends TestCase
|
|||||||
->assertCookie('guest_token')
|
->assertCookie('guest_token')
|
||||||
->assertJsonPath('data.items.0.catalog_item_id', $item->id)
|
->assertJsonPath('data.items.0.catalog_item_id', $item->id)
|
||||||
->assertJsonPath('data.items.0.variant_id', null)
|
->assertJsonPath('data.items.0.variant_id', null)
|
||||||
|
->assertJsonPath('data.items.0.variant', null)
|
||||||
->assertJsonPath('data.items.0.cantidad', 2)
|
->assertJsonPath('data.items.0.cantidad', 2)
|
||||||
->assertJsonPath('data.items.0.precio_unitario', '49.90')
|
->assertJsonPath('data.items.0.precio_unitario', '49.90')
|
||||||
->assertJsonPath('data.items.0.product.nombre', 'Item acme')
|
->assertJsonPath('data.items.0.nombre', 'Item acme')
|
||||||
|
->assertJsonPath('data.items.0.imagen', null)
|
||||||
|
->assertJsonMissingPath('data.items.0.product')
|
||||||
->assertJsonPath('data.subtotal', '99.80');
|
->assertJsonPath('data.subtotal', '99.80');
|
||||||
|
|
||||||
$guestTokenCookie = $response->getCookie('guest_token', false);
|
$guestTokenCookie = $response->getCookie('guest_token', false);
|
||||||
@@ -296,9 +299,10 @@ class CartControllerTest extends TestCase
|
|||||||
->assertOk()
|
->assertOk()
|
||||||
->assertJsonPath('data.items.0.variant_id', $secondVariant->id)
|
->assertJsonPath('data.items.0.variant_id', $secondVariant->id)
|
||||||
->assertJsonPath('data.items.0.precio_unitario', '20.00')
|
->assertJsonPath('data.items.0.precio_unitario', '20.00')
|
||||||
->assertJsonPath('data.items.0.product.variant.id', $secondVariant->id)
|
->assertJsonPath('data.items.0.variant.id', $secondVariant->id)
|
||||||
->assertJsonPath('data.items.0.product.variant.stock_tecnico', 0)
|
->assertJsonPath('data.items.0.variant.precio', '20.00')
|
||||||
->assertJsonMissingPath('data.items.0.product.variants');
|
->assertJsonPath('data.items.0.variant.stock_tecnico', 0)
|
||||||
|
->assertJsonMissingPath('data.items.0.product');
|
||||||
|
|
||||||
$this->assertDatabaseHas('inventories', [
|
$this->assertDatabaseHas('inventories', [
|
||||||
'id' => $firstVariant->inventory_id,
|
'id' => $firstVariant->inventory_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user