validateStructuredData method
Validates a single structured data item
Implementation
StructuredDataValidationResult validateStructuredData(
Map<String, String> data,
) {
// Check for required fields
for (final field in requiredFields) {
if (!data.containsKey(field) || data[field]!.isEmpty) {
return StructuredDataValidationResult.invalid(
data,
{},
errorMessage: 'Missing required field: $field',
);
}
}
// Validate each field
final fieldResults = <String, ContentValidationResult>{};
var needsCleaning = false;
for (final entry in data.entries) {
final field = entry.key;
final content = entry.value;
final result = contentValidator.validateContent(content);
fieldResults[field] = result;
if (result.cleanedContent != null) {
needsCleaning = true;
}
}
// Check if any fields are invalid
final invalidFields =
fieldResults.entries
.where((entry) => !entry.value.isValid)
.map((entry) => entry.key)
.toList();
if (invalidFields.isNotEmpty) {
return StructuredDataValidationResult.invalid(
data,
fieldResults,
errorMessage: 'Invalid fields: ${invalidFields.join(', ')}',
);
}
// Clean the data if needed
if (needsCleaning) {
final cleanedData = <String, String>{};
for (final entry in data.entries) {
final field = entry.key;
final content = entry.value;
final result = fieldResults[field]!;
cleanedData[field] = result.cleanedContent ?? content;
}
return StructuredDataValidationResult.cleaned(
data,
cleanedData,
fieldResults,
);
}
return StructuredDataValidationResult.valid(data, fieldResults);
}