import 'package:json_annotation/json_annotation.dart'; import '../../domain/entities/scan_entity.dart'; part 'save_request_model.g.dart'; /// API request model for saving scan data to the server @JsonSerializable() class SaveRequestModel { final String barcode; final String field1; final String field2; final String field3; final String field4; SaveRequestModel({ required this.barcode, required this.field1, required this.field2, required this.field3, required this.field4, }); /// Create from domain entity factory SaveRequestModel.fromEntity(ScanEntity entity) { return SaveRequestModel( barcode: entity.barcode, field1: entity.field1, field2: entity.field2, field3: entity.field3, field4: entity.field4, ); } /// Create from parameters factory SaveRequestModel.fromParams({ required String barcode, required String field1, required String field2, required String field3, required String field4, }) { return SaveRequestModel( barcode: barcode, field1: field1, field2: field2, field3: field3, field4: field4, ); } /// Create from JSON factory SaveRequestModel.fromJson(Map json) => _$SaveRequestModelFromJson(json); /// Convert to JSON for API requests Map toJson() => _$SaveRequestModelToJson(this); /// Create a copy with updated fields SaveRequestModel copyWith({ String? barcode, String? field1, String? field2, String? field3, String? field4, }) { return SaveRequestModel( barcode: barcode ?? this.barcode, field1: field1 ?? this.field1, field2: field2 ?? this.field2, field3: field3 ?? this.field3, field4: field4 ?? this.field4, ); } /// Validate the request data bool get isValid { return barcode.trim().isNotEmpty && field1.trim().isNotEmpty && field2.trim().isNotEmpty && field3.trim().isNotEmpty && field4.trim().isNotEmpty; } /// Get validation errors List get validationErrors { final errors = []; if (barcode.trim().isEmpty) { errors.add('Barcode is required'); } if (field1.trim().isEmpty) { errors.add('Field 1 is required'); } if (field2.trim().isEmpty) { errors.add('Field 2 is required'); } if (field3.trim().isEmpty) { errors.add('Field 3 is required'); } if (field4.trim().isEmpty) { errors.add('Field 4 is required'); } return errors; } @override String toString() { return 'SaveRequestModel{barcode: $barcode, field1: $field1, field2: $field2, field3: $field3, field4: $field4}'; } @override bool operator ==(Object other) => identical(this, other) || other is SaveRequestModel && runtimeType == other.runtimeType && barcode == other.barcode && field1 == other.field1 && field2 == other.field2 && field3 == other.field3 && field4 == other.field4; @override int get hashCode => barcode.hashCode ^ field1.hashCode ^ field2.hashCode ^ field3.hashCode ^ field4.hashCode; }