/// Domain Entity: Cart /// /// Represents a shopping cart for a user. library; /// Cart Entity /// /// Contains cart-level information: /// - User ID /// - Total amount /// - Sync status /// - Timestamps class Cart { /// Unique cart identifier final String cartId; /// User ID who owns this cart final String userId; /// Total cart amount final double totalAmount; /// Whether cart is synced with backend final bool isSynced; /// Last modification timestamp final DateTime lastModified; /// Cart creation timestamp final DateTime createdAt; const Cart({ required this.cartId, required this.userId, required this.totalAmount, required this.isSynced, required this.lastModified, required this.createdAt, }); /// Check if cart is empty bool get isEmpty => totalAmount == 0; /// Check if cart needs sync bool get needsSync => !isSynced; /// Copy with method for immutability Cart copyWith({ String? cartId, String? userId, double? totalAmount, bool? isSynced, DateTime? lastModified, DateTime? createdAt, }) { return Cart( cartId: cartId ?? this.cartId, userId: userId ?? this.userId, totalAmount: totalAmount ?? this.totalAmount, isSynced: isSynced ?? this.isSynced, lastModified: lastModified ?? this.lastModified, createdAt: createdAt ?? this.createdAt, ); } @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is Cart && other.cartId == cartId && other.userId == userId && other.totalAmount == totalAmount && other.isSynced == isSynced; } @override int get hashCode { return Object.hash(cartId, userId, totalAmount, isSynced); } @override String toString() { return 'Cart(cartId: $cartId, userId: $userId, totalAmount: $totalAmount, ' 'isSynced: $isSynced, lastModified: $lastModified)'; } }