diff --git a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/BeheerZoekenEventsConsumer.cs b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/BeheerZoekenEventsConsumer.cs index 16b1702a8..4d7e47807 100644 --- a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/BeheerZoekenEventsConsumer.cs +++ b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/BeheerZoekenEventsConsumer.cs @@ -63,6 +63,8 @@ public async Task ConsumeAsync(IReadOnlyList streamActions) case nameof(VerenigingWerdGemarkeerdAlsDubbelVan): case nameof(VerenigingAanvaarddeDubbeleVereniging): case nameof(WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt): + case nameof(MarkeringDubbeleVerengingWerdGecorrigeerd): + case nameof(VerenigingAanvaarddeCorrectieDubbeleVereniging): try { await _zoekProjectionHandler.Handle(eventEnvelope); diff --git a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/ElasticRepository.cs b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/ElasticRepository.cs index b2b82e239..6910389d2 100644 --- a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/ElasticRepository.cs +++ b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/ElasticRepository.cs @@ -224,4 +224,18 @@ public async Task AppendCorresponderendeVCodes(string id, string vCodeDubbele // todo: log ? (should never happen in test/staging/production) throw new IndexDocumentFailed(response.DebugInformation); } + + public async Task RemoveCorresponderendeVCode(string id, string vCodeDubbeleVereniging) where T : class + { + var response = await _elasticClient.UpdateAsync( + id, + selector: u => u.Script( + s => s + .Source("ctx._source.corresponderendeVCodes.removeIf(c -> c == params.item)") + .Params(objects => objects.Add(key: "item", vCodeDubbeleVereniging)))); + + if (!response.IsValid) + // todo: log ? (should never happen in test/staging/production) + throw new IndexDocumentFailed(response.DebugInformation); + } } diff --git a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/IElasticRepository.cs b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/IElasticRepository.cs index c26a88051..9cdddfa5b 100644 --- a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/IElasticRepository.cs +++ b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/IElasticRepository.cs @@ -22,5 +22,6 @@ Task IndexAsync(TDocument document) Task UpdateLocatie(string id, ILocatie locatie) where TDocument : class; Task UpdateAdres(string id, int locatieId, string adresVoorstelling, string postcode, string gemeente) where TDocument : class; Task AppendCorresponderendeVCodes(string id, string vCodeDubbeleVereniging) where TDocument : class; + Task RemoveCorresponderendeVCode(string id, string vCodeDubbeleVereniging) where TDocument : class; } diff --git a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/Zoeken/BeheerZoekProjection.cs b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/Zoeken/BeheerZoekProjection.cs index f19fa94fd..86c61a9b3 100644 --- a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/Zoeken/BeheerZoekProjection.cs +++ b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/Zoeken/BeheerZoekProjection.cs @@ -546,6 +546,23 @@ await _elasticRepository.AppendCorresponderendeVCodes( message.Data.VCodeDubbeleVereniging); } + public async Task Handle(EventEnvelope message) + { + await _elasticRepository.UpdateAsync( + message.VCode, + new VerenigingZoekDocument + { + IsDubbel = false, + }); + } + + public async Task Handle(EventEnvelope message) + { + await _elasticRepository.RemoveCorresponderendeVCode( + message.VCode, + message.Data.VCodeDubbeleVereniging); + } + public async Task Handle(EventEnvelope message) { await _elasticRepository.UpdateAsync( diff --git a/test/AssociationRegistry.Test.E2E/Framework/Mappers/HistoriekGebeurtenisMapper.cs b/test/AssociationRegistry.Test.E2E/Framework/Mappers/HistoriekGebeurtenisMapper.cs index 955eec523..741ec2511 100644 --- a/test/AssociationRegistry.Test.E2E/Framework/Mappers/HistoriekGebeurtenisMapper.cs +++ b/test/AssociationRegistry.Test.E2E/Framework/Mappers/HistoriekGebeurtenisMapper.cs @@ -539,7 +539,7 @@ public static HistoriekGebeurtenisResponse MarkeringDubbeleVerengingWerdGecorrig VerenigingWerdGemarkeerdAlsDubbelVan verenigingWerdGemarkeerdAlsDubbelVan) => new() { - Beschrijving = $"Vereniging werd gecorrigeerd als dubbel van {verenigingWerdGemarkeerdAlsDubbelVan.VCodeAuthentiekeVereniging}.", + Beschrijving = $"Markering dubbel van vereniging {verenigingWerdGemarkeerdAlsDubbelVan.VCodeAuthentiekeVereniging}.", Gebeurtenis = nameof(Events.MarkeringDubbeleVerengingWerdGecorrigeerd), Data = new { diff --git a/test/AssociationRegistry.Test.E2E/When_Corrigeer_Markeer_Als_Dubbel_Van/Beheer/Zoeken/Returns_ZoekResponse.cs b/test/AssociationRegistry.Test.E2E/When_Corrigeer_Markeer_Als_Dubbel_Van/Beheer/Zoeken/Returns_ZoekResponse.cs index 1f2d70a6d..a2a7f7571 100644 --- a/test/AssociationRegistry.Test.E2E/When_Corrigeer_Markeer_Als_Dubbel_Van/Beheer/Zoeken/Returns_ZoekResponse.cs +++ b/test/AssociationRegistry.Test.E2E/When_Corrigeer_Markeer_Als_Dubbel_Van/Beheer/Zoeken/Returns_ZoekResponse.cs @@ -26,7 +26,7 @@ public void With_Context() } [Fact] - public async Task With_Verenigingen_Empty() + public async Task With_Vereniging() => Response.Verenigingen.Should().NotBeEmpty(); public override Func GetResponse diff --git a/test/AssociationRegistry.Test.Projections/Beheer/Zoeken/Dubbels/Given_MarkeringDubbeleVerengingWerdGecorrigeerd.cs b/test/AssociationRegistry.Test.Projections/Beheer/Zoeken/Dubbels/Given_MarkeringDubbeleVerengingWerdGecorrigeerd.cs new file mode 100644 index 000000000..12a5b3190 --- /dev/null +++ b/test/AssociationRegistry.Test.Projections/Beheer/Zoeken/Dubbels/Given_MarkeringDubbeleVerengingWerdGecorrigeerd.cs @@ -0,0 +1,10 @@ +namespace AssociationRegistry.Test.Projections.Beheer.Zoeken.Dubbels; + +[Collection(nameof(ProjectionContext))] +public class Given_MarkeringDubbeleVerengingWerdGecorrigeerd(BeheerZoekenScenarioFixture fixture) + : BeheerZoekenScenarioClassFixture +{ + [Fact] + public void Status_Is_Dubbel() + => fixture.Result.IsDubbel.Should().BeFalse(); +} diff --git a/test/AssociationRegistry.Test.Projections/Beheer/Zoeken/Dubbels/Given_VerenigingAanvaarddeCorrectieDubbeleVereniging.cs b/test/AssociationRegistry.Test.Projections/Beheer/Zoeken/Dubbels/Given_VerenigingAanvaarddeCorrectieDubbeleVereniging.cs new file mode 100644 index 000000000..e0174a143 --- /dev/null +++ b/test/AssociationRegistry.Test.Projections/Beheer/Zoeken/Dubbels/Given_VerenigingAanvaarddeCorrectieDubbeleVereniging.cs @@ -0,0 +1,10 @@ +namespace AssociationRegistry.Test.Projections.Beheer.Zoeken.Dubbels; + +[Collection(nameof(ProjectionContext))] +public class Given_VerenigingAanvaarddeCorrectieDubbeleVereniging(BeheerZoekenScenarioFixture fixture) + : BeheerZoekenScenarioClassFixture +{ + [Fact] + public void CorresponderendeVCodes_Contains_DubbeleVereniging() + => fixture.Result.CorresponderendeVCodes.Should().NotContain(fixture.Scenario.DubbeleVerenigingWerdGeregistreerd.VCode); +}