import 'package:hive_ce/hive.dart'; import '../../domain/entities/scan_entity.dart'; part 'scan_item.g.dart'; /// Data model for ScanEntity with Hive annotations for local storage /// This is the data layer representation that can be persisted @HiveType(typeId: 0) class ScanItem extends HiveObject { @HiveField(0) final String barcode; @HiveField(1) final DateTime timestamp; @HiveField(2) final String field1; @HiveField(3) final String field2; @HiveField(4) final String field3; @HiveField(5) final String field4; ScanItem({ required this.barcode, required this.timestamp, this.field1 = '', this.field2 = '', this.field3 = '', this.field4 = '', }); /// Convert from domain entity to data model factory ScanItem.fromEntity(ScanEntity entity) { return ScanItem( barcode: entity.barcode, timestamp: entity.timestamp, field1: entity.field1, field2: entity.field2, field3: entity.field3, field4: entity.field4, ); } /// Convert to domain entity ScanEntity toEntity() { return ScanEntity( barcode: barcode, timestamp: timestamp, field1: field1, field2: field2, field3: field3, field4: field4, ); } /// Create from JSON (useful for API responses) factory ScanItem.fromJson(Map json) { return ScanItem( barcode: json['barcode'] ?? '', timestamp: json['timestamp'] != null ? DateTime.parse(json['timestamp']) : DateTime.now(), field1: json['field1'] ?? '', field2: json['field2'] ?? '', field3: json['field3'] ?? '', field4: json['field4'] ?? '', ); } /// Convert to JSON (useful for API requests) Map toJson() { return { 'barcode': barcode, 'timestamp': timestamp.toIso8601String(), 'field1': field1, 'field2': field2, 'field3': field3, 'field4': field4, }; } /// Create a copy with updated fields ScanItem copyWith({ String? barcode, DateTime? timestamp, String? field1, String? field2, String? field3, String? field4, }) { return ScanItem( barcode: barcode ?? this.barcode, timestamp: timestamp ?? this.timestamp, field1: field1 ?? this.field1, field2: field2 ?? this.field2, field3: field3 ?? this.field3, field4: field4 ?? this.field4, ); } @override String toString() { return 'ScanItem{barcode: $barcode, timestamp: $timestamp, field1: $field1, field2: $field2, field3: $field3, field4: $field4}'; } @override bool operator ==(Object other) => identical(this, other) || other is ScanItem && runtimeType == other.runtimeType && barcode == other.barcode && timestamp == other.timestamp && field1 == other.field1 && field2 == other.field2 && field3 == other.field3 && field4 == other.field4; @override int get hashCode => barcode.hashCode ^ timestamp.hashCode ^ field1.hashCode ^ field2.hashCode ^ field3.hashCode ^ field4.hashCode; }