class ImageSuggestionData {
const ImageSuggestionData({
required this.id,
required this.targetType,
required this.targetId,
required this.status,
required this.originalFilename,
required this.createdAt,
required this.updatedAt,
required this.reasonCode,
required this.mediaCandidateId,
required this.technicalStatus,
required this.malwareStatus,
this.requestMessage = '',
this.submitterResponse = '',
this.responseAt = '',
});
final int id;
final String targetType;
final int targetId;
final String status;
final String originalFilename;
final String createdAt;
final String updatedAt;
final String reasonCode;
final int mediaCandidateId;
final String technicalStatus;
final String malwareStatus;
final String requestMessage;
final String submitterResponse;
final String responseAt;
factory ImageSuggestionData.fromJson(Map<String, dynamic> json) {
return ImageSuggestionData(
id: _int(json['id']),
targetType: _string(json['target_type']),
targetId: _int(json['target_id']),
status: _string(json['status'], 'submitted'),
originalFilename: _string(json['original_filename']),
createdAt: _string(json['created_at']),
updatedAt: _string(json['updated_at']),
reasonCode: _string(json['reason_code']),
mediaCandidateId: _int(json['media_candidate_id']),
technicalStatus: _string(_map(json['checks'])['technical_status']),
malwareStatus: _string(_map(json['checks'])['malware_status']),
requestMessage: _string(json['request_message']),
submitterResponse: _string(json['submitter_response']),
responseAt: _string(json['response_at']),
);
}
}
class ImageSuggestionList {
const ImageSuggestionList(this.items);
final List<ImageSuggestionData> items;
factory ImageSuggestionList.fromJson(Map<String, dynamic> json) {
final raw = json['suggestions'];
return ImageSuggestionList(
raw is List
? raw
.whereType<Map<String, dynamic>>()
.map(ImageSuggestionData.fromJson)
.toList(growable: false)
: const [],
);
}
}
String _string(Object? value, [String fallback = '']) =>
value is String && value.isNotEmpty ? value : fallback;
int _int(Object? value) =>
value is num ? value.toInt() : int.tryParse('$value') ?? 0;
Map<String, dynamic> _map(Object? value) =>
value is Map<String, dynamic> ? value : const <String, dynamic>{};
