feat(cart): refactor CartItem structure to remove nested product object and simplify access to properties

This commit is contained in:
2026-08-18 09:06:17 -03:00
parent 43e497cf97
commit 9937c1b484
7 changed files with 40 additions and 52 deletions

View File

@@ -571,11 +571,9 @@ describe('StoreLayoutComponent', () => {
precio_unitario: '100.00',
catalog_item_id: 1,
variant_id: null,
product: {
nombre: 'Producto',
imagen: null,
variant: null,
},
nombre: 'Producto',
imagen: null,
variant: null,
},
],
});
@@ -625,11 +623,9 @@ describe('StoreLayoutComponent', () => {
precio_unitario: '100.00',
catalog_item_id: 1,
variant_id: null,
product: {
nombre: 'Producto',
imagen: null,
variant: null,
},
nombre: 'Producto',
imagen: null,
variant: null,
},
],
});

View File

@@ -53,7 +53,7 @@ export class StoreLayoutComponent implements OnInit {
});
private mapCartItemToMock(item: CartItem): CartItemMock {
const fullName = item.product?.nombre ?? '';
const fullName = item.nombre ?? '';
let product = fullName;
let attributes: { label: string; value: string }[] = [];
@@ -70,7 +70,7 @@ export class StoreLayoutComponent implements OnInit {
});
}
const selectedVariant = item.product?.variant ?? null;
const selectedVariant = item.variant;
if (selectedVariant) {
attributes = Object.entries(selectedVariant.values).map(([label, value]) => ({
@@ -81,7 +81,7 @@ export class StoreLayoutComponent implements OnInit {
return {
cartItemId: item.id,
imageUrl: item.product?.imagen ?? null,
imageUrl: item.imagen,
product,
originalPrice: null,
discountedPrice: parseFloat(item.precio_unitario),

View File

@@ -1,9 +1,3 @@
export interface CartItemProduct {
nombre: string;
imagen: string | null;
variant: CartItemVariant | null;
}
export interface CartItemVariantOption {
value: string;
label: string;
@@ -27,7 +21,9 @@ export interface CartItem {
precio_unitario: string;
catalog_item_id: number;
variant_id: number | null;
product: CartItemProduct | null;
nombre: string | null;
imagen: string | null;
variant: CartItemVariant | null;
}
export interface Cart {

View File

@@ -24,15 +24,13 @@ describe('CartService', () => {
precio_unitario: '10.00',
catalog_item_id: 5,
variant_id: 10,
product: {
nombre: 'Test Product (Size: M)',
imagen: null,
variant: {
id: 10,
precio: '10.00',
stock_tecnico: 1,
values: { size: 'M' },
},
nombre: 'Test Product (Size: M)',
imagen: null,
variant: {
id: 10,
precio: '10.00',
stock_tecnico: 1,
values: { size: 'M' },
},
},
],

View File

@@ -254,7 +254,7 @@ export class CartComponent {
return {
cartItemId: item.id,
productName: item.product?.nombre ?? 'este producto',
productName: item.nombre ?? 'este producto',
};
}

View File

@@ -110,7 +110,9 @@ describe('ProductTicketSelectorComponent', () => {
precio_unitario: '10000.00',
catalog_item_id: 7,
variant_id: 401,
product: null,
nombre: 'Entrada',
imagen: null,
variant: resolvedVariant,
},
],
},
@@ -200,17 +202,15 @@ describe('ProductTicketSelectorComponent', () => {
precio_unitario: '10000.00',
catalog_item_id: 7,
variant_id: 401,
product: {
nombre: 'Entrada',
imagen: null,
variant: {
id: 401,
precio: '10000.00',
stock_tecnico: 1,
values: {
sector: { value: 'a', label: 'Sector A' },
seat: '1',
},
nombre: 'Entrada',
imagen: null,
variant: {
id: 401,
precio: '10000.00',
stock_tecnico: 1,
values: {
sector: { value: 'a', label: 'Sector A' },
seat: '1',
},
},
},
@@ -299,15 +299,13 @@ describe('ProductTicketSelectorComponent', () => {
precio_unitario: '10000.00',
catalog_item_id: 7,
variant_id: 401,
product: {
nombre: 'Entrada',
imagen: null,
variant: {
id: 401,
precio: '10000.00',
stock_tecnico: 0,
values: { seat: '1' },
},
nombre: 'Entrada',
imagen: null,
variant: {
id: 401,
precio: '10000.00',
stock_tecnico: 0,
values: { seat: '1' },
},
},
],

View File

@@ -455,7 +455,7 @@ export class ProductTicketSelectorComponent {
private createCartRow(item: CartItem, id = this.nextRowId++): TicketSelectionRow | null {
if (item.variant_id === null) return null;
const variant = item.product?.variant;
const variant = item.variant;
if (!variant || variant.id !== item.variant_id) return null;
const selectedValues = this.normalizeCartValues(variant.values);