Un producto agregado a un Cart: qué producto, cuánto y con qué variantes.
quantity es el número de unidades y stock el peso por unidad para productos por peso
(unit_config); en productos sin peso, stock vale 1. La cantidad efectiva del pedido es
quantity * stock.
snapshot e is_valid son derivados: los recalcula el carrito (Cart::computePrices())
cada vez que cambia, con el precio y los datos congelados del producto y si su configuración
(variantes, stock, límites de compra) es válida. El cliente no los envía.
| Atributo | Tipo | Descripción |
|---|---|---|
id |
int |
|
list_type |
string\|null |
Contenedor del ítem (relación polimórfica). Hoy siempre App\Models\Cart |
list_id |
int\|null |
Id del contenedor (el cart_id) |
client_id |
int |
Cliente dueño del ítem (oculto) |
branch_id |
int\|null |
Comercio del ítem (oculto); null en servicios / envío directo |
good_id |
int\|null |
Producto solicitado |
quantity |
int |
Cantidad de unidades solicitadas (ej. 2 hamburguesas) |
stock |
float |
Peso por unidad para productos por peso (ej. 0.5 = 0,5 KG). 1 si el producto no tiene unit_config. Siempre se aplica |
extras |
array\|null |
Variantes elegidas: lista de { property_id, value }. value = id de PropertyOption (tablas de opciones) o el valor crudo (rango / texto). Repetir una entrada = elegir esa opción N veces |
notes |
string\|null |
Notas para este producto |
provider_id |
int\|null |
Proveedor pre-asignado a este ítem; solo en órdenes de tipo servicio (cada servicio del pedido puede tener su propio proveedor) |
snapshot |
array |
Instantánea derivada del producto (precio, tarifas, datos del good). La calcula el carrito; no se envía en el request |
is_valid |
bool |
Si la configuración del ítem (variantes, stock, límites) es válida tras el último recálculo del carrito |
created_at |
datetime\|null |
|
updated_at |
datetime\|null |
|
branch_good_id |
int\|null |
BranchGood resuelto para good_id en branch_id |
allLogs |
ApiLog> |
|
branchGood |
BranchGood\|null |
Oferta del producto en el comercio (precio, stock, propiedades) |
client |
Client |
|
list |
Model\|Eloquent |
Contenedor del ítem ({@link \App\Models\Cart}) |
logs |
ApiLog> |
{
"id": 16,
"good_id": 8719,
"quantity": 2,
"stock": 1,
"extras": null,
"notes": null,
"provider_id": null,
"snapshot": {
"good_id": 8719,
"quantity": 2,
"notes": null,
"client_id": 10148,
"branch_id": 80,
"units": 2,
"name": "CEREAL NESTUM ARROZ PREBIO 6M BOLSA 225G",
"short_details": "n/a",
"details": "NEST ARR PREB BOL225",
"picture_urls": [
"https://api-dev.dondemand.io/storage/companies/69/good/good_8719_0_1685195225.jpg"
],
"base_price_e2": 10,
"total_price_e2": 10,
"original_total_e2": 10,
"good_stock": 49,
"sku": "7591016204764",
"promo_id": null,
"provider_fee_e2": 0,
"quantity_real": 1,
"properties": []
},
"is_valid": true,
"created_at": "2024-05-29 21:11:59",
"updated_at": "2024-07-04 12:47:48",
"branch_good_id": 8909
}
Agrega un producto al carrito
El atributo quantity representa la cantidad solicitada del producto elegido, por ejemplo: 2 Hamburguesas
El atributo stock representa el peso por unidad en los productos por peso, por ejemplo: 0.5 KG de Queso. En caso
de productos que no poseen configuración de peso (unit_config), este valor no tendrá ningún efecto.
Respuesta: Cart
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/carts/{cartId}/cart-items |
Authorization |
{
"good_id": "required|integer|exists:goods,id",
"quantity": "required|integer|min:1",
"stock": "nullable|numeric|min:0.001",
"provider_id": "nullable|integer|exists:providers,id",
"notes": "nullable|string|max:255",
"extras": [
{
"property_id": "required|integer|exists:properties,id",
"value": "required|string"
}
]
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC601 |
400 | El producto no existe en el comercio del carrito. |
EC602 |
400 | No se pueden mezclar productos de tipos distintos en un mismo carrito. |
{info} Soporta: Paginación Filters Carga dinámica
Muestra los productos que posee un Carrito
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/carts/{cartId}/cart-items |
Authorization |
Actualiza un producto del carrito.
Respuesta: Cart
| Método | URI | Cabeceras |
|---|---|---|
| PATCH | /companies/{companyId}/cart-items/{cartItemId} |
Authorization |
{
"quantity": "integer|min:1",
"stock": "nullable|numeric|min:0.001",
"provider_id": "nullable|integer|exists:providers,id",
"notes": "nullable|string|max:255",
"extras": [
{
"property_id": "required|integer|exists:properties,id",
"value": "required|string"
}
]
}
Elimina un producto del carrito
Respuesta: Cart
| Método | URI | Cabeceras |
|---|---|---|
| DELETE | /companies/{companyId}/cart-items/{cartItemId} |
Authorization |
allLogs HasMany ApiLogbranchGood HasOne BranchGoodclient BelongsTo Clientlist BelongsTo Cartlogs HasMany ApiLog