From 42b0616f7fd435bef0f2ddacd683343583648277 Mon Sep 17 00:00:00 2001 From: emalfroy Date: Thu, 12 Dec 2024 15:55:06 +0100 Subject: [PATCH] feat: or-2334 dont return dubbele vereniging for publiek zoeken --- .../Queries/PubliekVerenigingenZoekQuery.cs | 10 +++++++++- .../Projections/Search/ElasticEventProjection.cs | 13 ++++++------- .../Projections/Search/MartenEventsConsumer.cs | 1 + src/AssociationRegistry.Public.Schema/IIsDubbel.cs | 6 ++++++ .../Search/VerenigingZoekDocument.cs | 3 ++- .../Beheer/Zoeken/Returns_ZoekResponse.cs | 2 +- .../Returns_ZoekResponse.cs | 2 -- .../Publiek/Zoeken/Returns_ZoekResponse.cs | 10 +++++----- .../Given_VerenigingWerdGemarkeerdAlsDubbel.cs | 12 ++++++++++++ 9 files changed, 42 insertions(+), 17 deletions(-) create mode 100644 src/AssociationRegistry.Public.Schema/IIsDubbel.cs create mode 100644 test/AssociationRegistry.Test.Projections/Publiek/Zoeken/Dubbels/Given_VerenigingWerdGemarkeerdAlsDubbel.cs diff --git a/src/AssociationRegistry.Public.Api/Queries/PubliekVerenigingenZoekQuery.cs b/src/AssociationRegistry.Public.Api/Queries/PubliekVerenigingenZoekQuery.cs index 550fc61ab..71e58b77a 100644 --- a/src/AssociationRegistry.Public.Api/Queries/PubliekVerenigingenZoekQuery.cs +++ b/src/AssociationRegistry.Public.Api/Queries/PubliekVerenigingenZoekQuery.cs @@ -2,6 +2,7 @@ namespace AssociationRegistry.Public.Api.Queries; using Constants; using Framework; +using Marten.Linq.SoftDeletes; using Nest; using Schema; using Schema.Constants; @@ -44,7 +45,8 @@ public async Task> ExecuteAsync(PubliekV ) .MustNot( BeUitgeschrevenUitPubliekeDatastroom, - BeRemoved) + BeRemoved, + BeDubbel) ) ) .Aggregations( @@ -204,6 +206,12 @@ private static QueryContainer BeRemoved(QueryContainerDescriptor q) { return q.Term(field: arg => arg.IsVerwijderd, value: true); } + + private static QueryContainer BeDubbel(QueryContainerDescriptor q) + where T : class, IIsDubbel + { + return q.Term(field: arg => arg.IsDubbel, value: true); + } } public record PubliekVerenigingenZoekFilter diff --git a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticEventProjection.cs b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticEventProjection.cs index a8825ca72..da25d2f7e 100644 --- a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticEventProjection.cs +++ b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticEventProjection.cs @@ -498,13 +498,12 @@ await _elasticRepository.RemoveLidmaatschap( message.Data.Lidmaatschap.LidmaatschapId); } - // public async Task Handle(EventEnvelope message) - // { - // await _elasticRepository.UpdateLidmaatschap( - // message.VCode, - // Map(message.Data.Lidmaatschap, message.VCode)); - // } - + public async Task Handle(EventEnvelope message) + { + await _elasticRepository + .UpdateAsync(message.VCode, new VerenigingZoekDocument + { IsDubbel = true }); + } private static VerenigingZoekDocument.Lidmaatschap Map(Registratiedata.Lidmaatschap lidmaatschap, string vCode) => new() diff --git a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/MartenEventsConsumer.cs b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/MartenEventsConsumer.cs index 21b9cf314..6c15758e3 100644 --- a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/MartenEventsConsumer.cs +++ b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/MartenEventsConsumer.cs @@ -58,6 +58,7 @@ public async Task ConsumeAsync(IReadOnlyList streamActions) case nameof(LidmaatschapWerdToegevoegd): case nameof(LidmaatschapWerdGewijzigd): case nameof(LidmaatschapWerdVerwijderd): + case nameof(VerenigingWerdGemarkeerdAlsDubbelVan): try { await _handler.Handle(eventEnvelope); diff --git a/src/AssociationRegistry.Public.Schema/IIsDubbel.cs b/src/AssociationRegistry.Public.Schema/IIsDubbel.cs new file mode 100644 index 000000000..0435b23a7 --- /dev/null +++ b/src/AssociationRegistry.Public.Schema/IIsDubbel.cs @@ -0,0 +1,6 @@ +namespace AssociationRegistry.Public.Schema; + +public interface IIsDubbel +{ + public bool IsDubbel { get; } +} diff --git a/src/AssociationRegistry.Public.Schema/Search/VerenigingZoekDocument.cs b/src/AssociationRegistry.Public.Schema/Search/VerenigingZoekDocument.cs index a934c8d03..b01f74173 100644 --- a/src/AssociationRegistry.Public.Schema/Search/VerenigingZoekDocument.cs +++ b/src/AssociationRegistry.Public.Schema/Search/VerenigingZoekDocument.cs @@ -2,7 +2,7 @@ namespace AssociationRegistry.Public.Schema.Search; using Detail; -public class VerenigingZoekDocument : ICanBeUitgeschrevenUitPubliekeDatastroom, IHasStatus, IDeletable +public class VerenigingZoekDocument : ICanBeUitgeschrevenUitPubliekeDatastroom, IHasStatus, IDeletable, IIsDubbel { public string JsonLdMetadataType { get; set; } public string VCode { get; set; } = null!; @@ -21,6 +21,7 @@ public class VerenigingZoekDocument : ICanBeUitgeschrevenUitPubliekeDatastroom, public bool? IsUitgeschrevenUitPubliekeDatastroom { get; set; } public string Status { get; set; } = null!; public bool IsVerwijderd { get; set; } + public bool IsDubbel { get; set; } public class Locatie { diff --git a/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Beheer/Zoeken/Returns_ZoekResponse.cs b/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Beheer/Zoeken/Returns_ZoekResponse.cs index a078080ae..388fed170 100644 --- a/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Beheer/Zoeken/Returns_ZoekResponse.cs +++ b/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Beheer/Zoeken/Returns_ZoekResponse.cs @@ -29,7 +29,7 @@ public void With_Context() } [Fact] - public async Task WithFeitelijkeVereniging() + public async Task With_Verenigingen_Empty() { Response.Verenigingen.Should().BeEmpty(); } diff --git a/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Beheer/ZoekenAuthentiekeVereniging/Returns_ZoekResponse.cs b/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Beheer/ZoekenAuthentiekeVereniging/Returns_ZoekResponse.cs index 8204d547d..4ddd2b62a 100644 --- a/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Beheer/ZoekenAuthentiekeVereniging/Returns_ZoekResponse.cs +++ b/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Beheer/ZoekenAuthentiekeVereniging/Returns_ZoekResponse.cs @@ -14,12 +14,10 @@ public class Returns_SearchVerenigingenResponse : End2EndTest { private readonly MarkeerAlsDubbelVanContext _testContext; - private readonly FeitelijkeVerenigingWerdGeregistreerd FeitelijkeVerenigingWerdGeregistreerd; public Returns_SearchVerenigingenResponse(MarkeerAlsDubbelVanContext testContext) : base(testContext) { _testContext = testContext; - FeitelijkeVerenigingWerdGeregistreerd = testContext.Scenario.FeitelijkeVerenigingWerdGeregistreerd; } [Fact] diff --git a/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Publiek/Zoeken/Returns_ZoekResponse.cs b/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Publiek/Zoeken/Returns_ZoekResponse.cs index a078080ae..1c0142ba5 100644 --- a/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Publiek/Zoeken/Returns_ZoekResponse.cs +++ b/test/AssociationRegistry.Test.E2E/When_Markeer_Als_Dubbel_Van/Publiek/Zoeken/Returns_ZoekResponse.cs @@ -1,13 +1,13 @@ -namespace AssociationRegistry.Test.E2E.When_Markeer_Als_Dubbel_Van.Beheer.Zoeken; +namespace AssociationRegistry.Test.E2E.When_Markeer_Als_Dubbel_Van.Publiek.Zoeken; using Admin.Api.Verenigingen.Dubbels.FeitelijkeVereniging.MarkeerAlsDubbelVan.RequestModels; -using Admin.Api.Verenigingen.Search.ResponseModels; using Events; using FluentAssertions; using Framework.AlbaHost; using Framework.ApiSetup; using Framework.TestClasses; using KellermanSoftware.CompareNetObjects; +using Public.Api.Verenigingen.Search.ResponseModels; using Xunit; [Collection(FullBlownApiCollection.Name)] @@ -25,15 +25,15 @@ public Returns_SearchVerenigingenResponse(MarkeerAlsDubbelVanContext testContext [Fact] public void With_Context() { - Response.Context.ShouldCompare("http://127.0.0.1:11003/v1/contexten/beheer/zoek-verenigingen-context.json"); + Response.Context.ShouldCompare("http://127.0.0.1:11003/v1/contexten/publiek/zoek-verenigingen-context.json"); } [Fact] - public async Task WithFeitelijkeVereniging() + public async Task With_Verenigingen_Empty() { Response.Verenigingen.Should().BeEmpty(); } public override Func GetResponse - => setup => setup.AdminApiHost.GetBeheerZoeken($"vCode:{_testContext.VCode}"); + => setup => setup.PublicApiHost.GetPubliekZoeken($"vCode:{_testContext.VCode}"); } diff --git a/test/AssociationRegistry.Test.Projections/Publiek/Zoeken/Dubbels/Given_VerenigingWerdGemarkeerdAlsDubbel.cs b/test/AssociationRegistry.Test.Projections/Publiek/Zoeken/Dubbels/Given_VerenigingWerdGemarkeerdAlsDubbel.cs new file mode 100644 index 000000000..139743a40 --- /dev/null +++ b/test/AssociationRegistry.Test.Projections/Publiek/Zoeken/Dubbels/Given_VerenigingWerdGemarkeerdAlsDubbel.cs @@ -0,0 +1,12 @@ +namespace AssociationRegistry.Test.Projections.Publiek.Zoeken.Dubbels; + +using Public.Schema.Constants; + +[Collection(nameof(ProjectionContext))] +public class Given_VerenigingWerdGemarkeerdAlsDubbel(PubliekZoekenScenarioFixture fixture) + : PubliekZoekenScenarioClassFixture +{ + [Fact] + public void Status_Is_Dubbel() + => fixture.Result.IsDubbel.Should().BeTrue(); +}