validateStructuredData method

StructuredDataValidationResult validateStructuredData(
  1. Map<String, String> data
)

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);
}