From 5e2202b266459ede0cdacbb251f2fc38b17da82b Mon Sep 17 00:00:00 2001 From: Rik De Peuter Date: Mon, 18 Dec 2023 14:14:51 +0100 Subject: [PATCH] fix: WR-797 map MaintenanceAuthority to internal OrgId in FC before processing the feature (#1330) --- .../RoadSegmentFeatureCompareTranslator.cs | 51 ++++++++++++------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/src/RoadRegistry.BackOffice/FeatureCompare/Translators/RoadSegmentFeatureCompareTranslator.cs b/src/RoadRegistry.BackOffice/FeatureCompare/Translators/RoadSegmentFeatureCompareTranslator.cs index 6a27de401..fc4e45df4 100644 --- a/src/RoadRegistry.BackOffice/FeatureCompare/Translators/RoadSegmentFeatureCompareTranslator.cs +++ b/src/RoadRegistry.BackOffice/FeatureCompare/Translators/RoadSegmentFeatureCompareTranslator.cs @@ -33,7 +33,7 @@ public RoadSegmentFeatureCompareTranslator(RoadSegmentFeatureCompareFeatureReade var problems = ZipArchiveProblems.None; var processedRecords = new List(); - + List> FindMatchingExtractFeatures(RoadSegmentFeatureCompareAttributes changeFeatureAttributes) { if (changeFeatureAttributes.Method == RoadSegmentGeometryDrawMethod.Outlined) @@ -98,21 +98,7 @@ RoadNodeFeatureCompareRecord FindRoadNodeByOriginalId(RoadNodeId originalId) EndNodeId = endNodeFeature.GetActualId() }; } - - var maintenanceAuthority = await _organizationRepository.FindByIdOrOvoCodeAsync(changeFeature.Attributes.MaintenanceAuthority, cancellationToken); - if (maintenanceAuthority is null) - { - var recordContext = FileName.AtDbaseRecord(FeatureType.Change, changeFeature.RecordNumber); - - problems += recordContext.RoadSegmentMaintenanceAuthorityNotKnown(changeFeature.Attributes.MaintenanceAuthority); - continue; - } - - changeFeatureAttributes = changeFeatureAttributes with - { - MaintenanceAuthority = maintenanceAuthority.Code - }; - + var matchingExtractFeatures = FindMatchingExtractFeatures(changeFeatureAttributes); if (matchingExtractFeatures.Any()) { @@ -194,7 +180,7 @@ RoadNodeFeatureCompareRecord FindRoadNodeByOriginalId(RoadNodeId originalId) return (processedRecords, problems); } - + public override async Task<(TranslatedChanges, ZipArchiveProblems)> TranslateAsync(ZipArchiveEntryFeatureCompareTranslateContext context, TranslatedChanges changes, CancellationToken cancellationToken) { var (extractFeatures, changeFeatures, integrationFeatures, problems) = ReadExtractAndChangeAndIntegrationFeatures(context.Archive, FileName, context); @@ -207,6 +193,9 @@ RoadNodeFeatureCompareRecord FindRoadNodeByOriginalId(RoadNodeId originalId) if (changeFeatures.Any()) { + (changeFeatures, var maintenanceAuthorityProblems) = await ValidateMaintenanceAuthorityAndMapToInternalId(changeFeatures, cancellationToken); + problems += maintenanceAuthorityProblems; + var batchCount = Debugger.IsAttached ? 1 : 2; var processedLeveringRecords = await Task.WhenAll( @@ -236,6 +225,34 @@ RoadNodeFeatureCompareRecord FindRoadNodeByOriginalId(RoadNodeId originalId) return (changes, problems); } + private async Task<(List>, ZipArchiveProblems)> ValidateMaintenanceAuthorityAndMapToInternalId(List> changeFeatures, CancellationToken cancellationToken) + { + var problems = ZipArchiveProblems.None; + var result = new List>(); + + foreach (var changeFeature in changeFeatures) + { + var maintenanceAuthority = await _organizationRepository.FindByIdOrOvoCodeAsync(changeFeature.Attributes.MaintenanceAuthority, cancellationToken); + if (maintenanceAuthority is null) + { + var recordContext = FileName.AtDbaseRecord(FeatureType.Change, changeFeature.RecordNumber); + + problems += recordContext.RoadSegmentMaintenanceAuthorityNotKnown(changeFeature.Attributes.MaintenanceAuthority); + continue; + } + + result.Add(changeFeature with + { + Attributes = changeFeature.Attributes with + { + MaintenanceAuthority = maintenanceAuthority.Code + } + }); + } + + return (result, problems); + } + private ZipArchiveProblems AddProcessedRecordsToContext(RoadSegmentId maxId, ICollection processedRecords, ZipArchiveEntryFeatureCompareTranslateContext context, CancellationToken cancellationToken) { var problems = ZipArchiveProblems.None;