update cart/favorite

This commit is contained in:
Phuoc Nguyen
2025-12-03 15:53:46 +07:00
parent e1c9f818d2
commit 27798cc234
19 changed files with 370 additions and 119 deletions

View File

@@ -36,6 +36,7 @@ class CartRepositoryImpl implements CartRepository {
required List<String> itemIds,
required List<double> quantities,
required List<double> prices,
List<double?>? conversionFactors,
}) async {
try {
// Validate input
@@ -48,11 +49,16 @@ class CartRepositoryImpl implements CartRepository {
// Build API request items
final items = <Map<String, dynamic>>[];
for (int i = 0; i < itemIds.length; i++) {
items.add({
final item = <String, dynamic>{
'item_id': itemIds[i],
'quantity': quantities[i],
'amount': prices[i],
});
};
// Add conversion_of_sm if provided
if (conversionFactors != null && i < conversionFactors.length) {
item['conversion_of_sm'] = conversionFactors[i] ?? 0.0;
}
items.add(item);
}
// Try API first
@@ -66,6 +72,7 @@ class CartRepositoryImpl implements CartRepository {
productId: itemIds[i],
quantity: quantities[i],
unitPrice: prices[i],
conversionOfSm: conversionFactors?[i],
);
await _localDataSource.addCartItem(cartItemModel);
}
@@ -80,6 +87,7 @@ class CartRepositoryImpl implements CartRepository {
productId: itemIds[i],
quantity: quantities[i],
unitPrice: prices[i],
conversionOfSm: conversionFactors?[i],
);
await _localDataSource.addCartItem(cartItemModel);
}
@@ -176,6 +184,7 @@ class CartRepositoryImpl implements CartRepository {
required String itemId,
required double quantity,
required double price,
double? conversionFactor,
}) async {
try {
// API doesn't have update endpoint, use add with new quantity
@@ -184,6 +193,7 @@ class CartRepositoryImpl implements CartRepository {
itemIds: [itemId],
quantities: [quantity],
prices: [price],
conversionFactors: conversionFactor != null ? [conversionFactor] : null,
);
} catch (e) {
throw UnknownException('Failed to update cart item quantity', e);
@@ -268,6 +278,9 @@ class CartRepositoryImpl implements CartRepository {
unitPrice: model.unitPrice,
subtotal: model.subtotal,
addedAt: model.addedAt,
itemName: model.itemName,
image: model.image,
conversionOfSm: model.conversionOfSm,
);
}
@@ -276,6 +289,7 @@ class CartRepositoryImpl implements CartRepository {
required String productId,
required double quantity,
required double unitPrice,
double? conversionOfSm,
}) {
return CartItemModel(
cartItemId: DateTime.now().millisecondsSinceEpoch.toString(),
@@ -285,6 +299,7 @@ class CartRepositoryImpl implements CartRepository {
unitPrice: unitPrice,
subtotal: quantity * unitPrice,
addedAt: DateTime.now(),
conversionOfSm: conversionOfSm,
);
}
}