134 lines
3.2 KiB
Dart
134 lines
3.2 KiB
Dart
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<String, dynamic> json) =>
|
|
_$SaveRequestModelFromJson(json);
|
|
|
|
/// Convert to JSON for API requests
|
|
Map<String, dynamic> 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<String> get validationErrors {
|
|
final errors = <String>[];
|
|
|
|
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;
|
|
} |