Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

61 Zeilen
2.3KB

  1. namespace Campaign_Tracker.Server.ExtensionData;
  2. /// <summary>
  3. /// Implements <see cref="ILegacyLinkIntegrityCheck"/> by scanning every record supplied
  4. /// by the registered <see cref="ILegacyLinkedRecordProvider"/> implementations and
  5. /// validating each one's legacy link through <see cref="ILegacyLinkValidator"/> (AC #4).
  6. /// When no providers are registered (i.e. no extension records exist yet), the report
  7. /// reflects zero records and 100% consistency.
  8. /// </summary>
  9. public sealed class LegacyLinkIntegrityService : ILegacyLinkIntegrityCheck
  10. {
  11. private readonly IEnumerable<ILegacyLinkedRecordProvider> _providers;
  12. private readonly ILegacyLinkValidator _validator;
  13. private readonly TimeProvider _timeProvider;
  14. public LegacyLinkIntegrityService(
  15. IEnumerable<ILegacyLinkedRecordProvider> providers,
  16. ILegacyLinkValidator validator,
  17. TimeProvider timeProvider)
  18. {
  19. _providers = providers;
  20. _validator = validator;
  21. _timeProvider = timeProvider;
  22. }
  23. public async Task<LegacyLinkIntegrityReport> CheckAsync(CancellationToken cancellationToken = default)
  24. {
  25. var failures = new List<LegacyLinkIntegrityFailure>();
  26. int total = 0;
  27. foreach (var provider in _providers)
  28. {
  29. var records = await provider.GetAllAsync(cancellationToken);
  30. foreach (var record in records)
  31. {
  32. total++;
  33. var result = await _validator.ValidateAsync(record.LegacyLink, cancellationToken);
  34. if (!result.IsValid)
  35. {
  36. failures.Add(new LegacyLinkIntegrityFailure(
  37. record.RecordType,
  38. record.RecordId,
  39. record.LegacyLink,
  40. result.Error ?? "Unknown validation error"));
  41. }
  42. }
  43. }
  44. int consistent = total - failures.Count;
  45. double pct = total == 0 ? 100.0 : (consistent / (double)total) * 100.0;
  46. return new LegacyLinkIntegrityReport(
  47. CheckedAt: _timeProvider.GetUtcNow(),
  48. TotalRecords: total,
  49. ConsistentRecords: consistent,
  50. FailedRecords: failures.Count,
  51. ConsistencyPercentage: Math.Round(pct, 4),
  52. Failures: failures);
  53. }
  54. }

Powered by TurnKey Linux.