From 7c25c4b37dd7014e4c166389a04e36f4cb382e0c Mon Sep 17 00:00:00 2001 From: Koen Metsu Date: Tue, 14 Nov 2023 10:04:27 +0100 Subject: [PATCH] fix: or-1759 possible solution for naamswijziging afdeling --- .../Search/ElasticEventProjection.cs | 15 +--- .../Projections/Search/ElasticRepository.cs | 68 +++++++++++++++---- .../Projections/Search/IElasticRepository.cs | 1 + 3 files changed, 56 insertions(+), 28 deletions(-) diff --git a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticEventProjection.cs b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticEventProjection.cs index c52f468b7..bf3a8ab4d 100644 --- a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticEventProjection.cs +++ b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticEventProjection.cs @@ -137,20 +137,7 @@ public async Task Handle(EventEnvelope message) { - await _elasticRepository.UpdateAsync( - message.Data.VCode, - new VerenigingZoekDocument - { - Naam = message.Data.Naam, - } - ); - await _elasticRepository.UpdateNaamInRelaties( - new VerenigingZoekDocument - { - VCode = message.Data.VCode, - Naam = message.Data.Naam, - } - ); + await _elasticRepository.WijzigNaamAfdeling(message.VCode, message.Data.Naam); } public async Task Handle(EventEnvelope message) diff --git a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticRepository.cs b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticRepository.cs index 1ccb64a52..144f32d92 100644 --- a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticRepository.cs +++ b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/ElasticRepository.cs @@ -1,7 +1,9 @@ namespace AssociationRegistry.Public.ProjectionHost.Projections.Search; +using Elasticsearch.Net; using Nest; using Schema.Search; +using Vereniging; public class ElasticRepository : IElasticRepository { @@ -128,20 +130,20 @@ public async Task UpdateNaamInRelaties(VerenigingZoekDocument documentToUpdate) .Nested(n => n .Path(document => document.Relaties) .Query(nq => nq - .Nested(n => n - .Path(doc => doc.Relaties.First() - .AndereVereniging) - .Query(nq2 => nq2 - .Term(m => m - .Field( - doc => doc - .Relaties - .First() - .AndereVereniging - .VCode) - .Value( - documentToUpdate - .VCode))))) + .Nested(n => n + .Path(doc => doc.Relaties.First() + .AndereVereniging) + .Query(nq2 => nq2 + .Term(m => m + .Field( + doc => doc + .Relaties + .First() + .AndereVereniging + .VCode) + .Value( + documentToUpdate + .VCode))))) ) )); @@ -172,4 +174,42 @@ public async Task UpdateNaamInRelaties(VerenigingZoekDocument documentToUpdate) if (!response.IsValid) throw new IndexDocumentFailed(response.DebugInformation); } + + public async Task WijzigNaamAfdeling(string vCode, string nieuweNaam) + { + var afdeling = _elasticClient.Get(vCode); + + if (afdeling.Source.Type.Code == Verenigingstype.Afdeling.Code) + { + var bulkResponse = await _elasticClient.BulkAsync(b => b + // Update the Association's name and perform version check + .Update(u => u + .Id(vCode) + .IfSequenceNumber(afdeling.SequenceNumber) + .IfPrimaryTerm(afdeling.PrimaryTerm) + .Doc(new VerenigingZoekDocument + { Naam = nieuweNaam })) + // Update the Mother Association's relation's name and perform version check + .Update(u => u + .Id(afdeling.Source.Relaties.First().AndereVereniging.VCode) + .ScriptedUpsert() + .Script(s => s + .Source( + "for (relatie in ctx._source.relaties) { if (relatie.andereVereniging.vCode == params.associationId) { relatie.andereVereniging.naam = params.newName; } }") + .Params(p => p + .Add(key: "newName", nieuweNaam) + .Add(key: "associationId", vCode)))) + .Refresh(Refresh.True)); + } + else + { + await UpdateAsync( + vCode, + new VerenigingZoekDocument + { + Naam = nieuweNaam, + } + ); + } + } } diff --git a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/IElasticRepository.cs b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/IElasticRepository.cs index ab3217b48..95fffd722 100644 --- a/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/IElasticRepository.cs +++ b/src/AssociationRegistry.Public.ProjectionHost/Projections/Search/IElasticRepository.cs @@ -18,4 +18,5 @@ Task IndexAsync(TDocument document) Task Remove(string id); Task AppendRelatie(string id, Relatie relatie); Task UpdateNaamInRelaties(VerenigingZoekDocument documentToUpdate); + Task WijzigNaamAfdeling(string vCode, string nieuweNaam); }