import 'package:hive_ce/hive.dart'; import 'package:worker/core/constants/storage_constants.dart'; import 'package:worker/features/cart/domain/entities/cart_item.dart'; part 'cart_item_model.g.dart'; /// Cart Item Model - Type ID: 5 /// /// Includes product details from cart API to avoid fetching each product. @HiveType(typeId: HiveTypeIds.cartItemModel) class CartItemModel extends HiveObject { CartItemModel({ required this.cartItemId, required this.cartId, required this.productId, required this.quantity, required this.unitPrice, required this.subtotal, required this.addedAt, this.itemName, this.image, this.conversionOfSm, }); @HiveField(0) final String cartItemId; @HiveField(1) final String cartId; @HiveField(2) final String productId; @HiveField(3) final double quantity; @HiveField(4) final double unitPrice; @HiveField(5) final double subtotal; @HiveField(6) final DateTime addedAt; /// Product name from cart API @HiveField(7) final String? itemName; /// Product image URL from cart API @HiveField(8) final String? image; /// Conversion factor (m² to tiles) from cart API @HiveField(9) final double? conversionOfSm; factory CartItemModel.fromJson(Map json) { return CartItemModel( cartItemId: json['cart_item_id'] as String, cartId: json['cart_id'] as String, productId: json['product_id'] as String, quantity: (json['quantity'] as num).toDouble(), unitPrice: (json['unit_price'] as num).toDouble(), subtotal: (json['subtotal'] as num).toDouble(), addedAt: DateTime.parse(json['added_at'] as String), ); } Map toJson() => { 'cart_item_id': cartItemId, 'cart_id': cartId, 'product_id': productId, 'quantity': quantity, 'unit_price': unitPrice, 'subtotal': subtotal, 'added_at': addedAt.toIso8601String(), }; CartItemModel copyWith({ String? cartItemId, String? cartId, String? productId, double? quantity, double? unitPrice, double? subtotal, DateTime? addedAt, String? itemName, String? image, double? conversionOfSm, }) => CartItemModel( cartItemId: cartItemId ?? this.cartItemId, cartId: cartId ?? this.cartId, productId: productId ?? this.productId, quantity: quantity ?? this.quantity, unitPrice: unitPrice ?? this.unitPrice, subtotal: subtotal ?? this.subtotal, addedAt: addedAt ?? this.addedAt, itemName: itemName ?? this.itemName, image: image ?? this.image, conversionOfSm: conversionOfSm ?? this.conversionOfSm, ); /// Convert to domain entity CartItem toEntity() => CartItem( cartItemId: cartItemId, cartId: cartId, productId: productId, quantity: quantity, unitPrice: unitPrice, subtotal: subtotal, addedAt: addedAt, itemName: itemName, image: image, conversionOfSm: conversionOfSm, ); }