diff --git a/src/AssociationRegistry.Acm.Api/Projections/VerenigingenPerInszProjection.cs b/src/AssociationRegistry.Acm.Api/Projections/VerenigingenPerInszProjection.cs index 28a5e2bb1..c0dfb43c5 100644 --- a/src/AssociationRegistry.Acm.Api/Projections/VerenigingenPerInszProjection.cs +++ b/src/AssociationRegistry.Acm.Api/Projections/VerenigingenPerInszProjection.cs @@ -136,6 +136,24 @@ public async Task Project( ops.StoreObjects(docs); } + public async Task Project(IEvent markeringDubbeleVerengingWerdGecorrigeerd, IDocumentOperations ops) + { + var docs = new List(); + + docs.AddRange(await VerenigingenPerInszProjector.Apply(markeringDubbeleVerengingWerdGecorrigeerd, ops)); + + ops.StoreObjects(docs); + } + + public async Task Project(IEvent VerenigingAanvaarddeCorrectieDubbeleVereniging, IDocumentOperations ops) + { + var docs = new List(); + + docs.AddRange(await VerenigingenPerInszProjector.Apply(VerenigingAanvaarddeCorrectieDubbeleVereniging, ops)); + + ops.StoreObjects(docs); + } + private static class VerenigingenPerInszProjector { public static async Task> Apply( @@ -379,6 +397,52 @@ public static async Task> Apply( return docs; } + + public static async Task> Apply( + IEvent verenigingAanvaarddeCorrectieDubbeleVereniging, + IDocumentOperations ops) + { + var docs = new List(); + var documents = await ops.GetVerenigingenPerInszDocuments(verenigingAanvaarddeCorrectieDubbeleVereniging.Data.VCode); + + foreach (var verenigingenPerInszDocument in documents) + { + var vereniging = + verenigingenPerInszDocument.Verenigingen.Single( + vereniging => vereniging.VCode == verenigingAanvaarddeCorrectieDubbeleVereniging.StreamKey!); + + vereniging.CorresponderendeVCodes = + vereniging.CorresponderendeVCodes + .Where(w => w != verenigingAanvaarddeCorrectieDubbeleVereniging.Data.VCodeDubbeleVereniging) + .ToArray(); + + docs.Add(verenigingenPerInszDocument); + } + + return docs; + } + + public static async Task> Apply( + IEvent markeringDubbeleVerengingWerdGecorrigeerd, + IDocumentOperations ops) + { + var docs = new List(); + var documents = await ops.GetVerenigingenPerInszDocuments(markeringDubbeleVerengingWerdGecorrigeerd.Data.VCode); + + foreach (var verenigingenPerInszDocument in documents) + { + var vereniging = + verenigingenPerInszDocument.Verenigingen.Single( + vereniging => vereniging.VCode == markeringDubbeleVerengingWerdGecorrigeerd.StreamKey!); + + vereniging.IsDubbel = false; + + docs.Add(verenigingenPerInszDocument); + } + + return docs; + } + } private static class VerenigingDocumentProjector diff --git a/test/AssociationRegistry.Test.Projections/Acm/Dubbels/Given_MarkeringDubbeleVerengingWerdGecorrigeerd.cs b/test/AssociationRegistry.Test.Projections/Acm/Dubbels/Given_MarkeringDubbeleVerengingWerdGecorrigeerd.cs new file mode 100644 index 000000000..c611ac182 --- /dev/null +++ b/test/AssociationRegistry.Test.Projections/Acm/Dubbels/Given_MarkeringDubbeleVerengingWerdGecorrigeerd.cs @@ -0,0 +1,25 @@ +namespace AssociationRegistry.Test.Projections.Acm.Dubbels; + +[Collection(nameof(ProjectionContext))] +public class Given_MarkeringDubbeleVerengingWerdGecorrigeerd( + VerenigingenPerInszScenarioFixture fixture) + : VerenigingenPerInszScenarioClassFixture +{ + [Fact] + public void Then_Dubbele_Vereniging_Is_Gemarkeerd_Als_Dubbel() + { + var dubbeleVereniging = + fixture.Result.Verenigingen.Single(x => x.VCode == fixture.Scenario.DubbeleVerenigingWerdGeregistreerd.VCode); + + dubbeleVereniging.IsDubbel.Should().BeFalse(); + } + + [Fact] + public void Then_Authentieke_Vereniging_Has_CorresponderendeVCodes() + { + var authentiekeVereniging = + fixture.Result.Verenigingen.Single(x => x.VCode == fixture.Scenario.AuthentiekeVerenigingWerdGeregistreerd.VCode); + + authentiekeVereniging.CorresponderendeVCodes.Should().NotContain(fixture.Scenario.DubbeleVerenigingWerdGeregistreerd.VCode); + } +} diff --git a/test/AssociationRegistry.Test.Projections/Scenario/VerenigingAanvaarddeCorrectieDubbeleVerenigingScenario.cs b/test/AssociationRegistry.Test.Projections/Scenario/VerenigingAanvaarddeCorrectieDubbeleVerenigingScenario.cs index 39b2074b2..18c178f6f 100644 --- a/test/AssociationRegistry.Test.Projections/Scenario/VerenigingAanvaarddeCorrectieDubbeleVerenigingScenario.cs +++ b/test/AssociationRegistry.Test.Projections/Scenario/VerenigingAanvaarddeCorrectieDubbeleVerenigingScenario.cs @@ -9,6 +9,7 @@ public class VerenigingAanvaarddeCorrectieDubbeleVerenigingScenario : InszScenar public FeitelijkeVerenigingWerdGeregistreerd AuthentiekeVerenigingWerdGeregistreerd { get; } public VerenigingWerdGemarkeerdAlsDubbelVan VerenigingWerdGemarkeerdAlsDubbelVan { get; set; } public VerenigingAanvaarddeDubbeleVereniging VerenigingAanvaarddeDubbeleVereniging { get; set; } + public MarkeringDubbeleVerengingWerdGecorrigeerd MarkeringDubbeleVerengingWerdGecorrigeerd { get; set; } public VerenigingAanvaarddeCorrectieDubbeleVereniging VerenigingAanvaarddeCorrectieDubbeleVereniging { get; set; } private string _insz { get; } @@ -31,6 +32,12 @@ public VerenigingAanvaarddeCorrectieDubbeleVerenigingScenario() VCodeAuthentiekeVereniging = AuthentiekeVerenigingWerdGeregistreerd.VCode, }; + MarkeringDubbeleVerengingWerdGecorrigeerd = AutoFixture.Create() with + { + VCode = DubbeleVerenigingWerdGeregistreerd.VCode, + VCodeAuthentiekeVereniging = AuthentiekeVerenigingWerdGeregistreerd.VCode, + }; + VerenigingAanvaarddeDubbeleVereniging = AutoFixture.Create() with { VCode = AuthentiekeVerenigingWerdGeregistreerd.VCode, @@ -48,7 +55,7 @@ public VerenigingAanvaarddeCorrectieDubbeleVerenigingScenario() public override EventsPerVCode[] Events => [ - new(DubbeleVerenigingWerdGeregistreerd.VCode, DubbeleVerenigingWerdGeregistreerd, VerenigingWerdGemarkeerdAlsDubbelVan), + new(DubbeleVerenigingWerdGeregistreerd.VCode, DubbeleVerenigingWerdGeregistreerd, VerenigingWerdGemarkeerdAlsDubbelVan, MarkeringDubbeleVerengingWerdGecorrigeerd), new(AuthentiekeVerenigingWerdGeregistreerd.VCode, AuthentiekeVerenigingWerdGeregistreerd, VerenigingAanvaarddeDubbeleVereniging, VerenigingAanvaarddeCorrectieDubbeleVereniging), ];