Skip to content

Commit

Permalink
refactor: or-1716 migrate dubbel info to verenigingStatus
Browse files Browse the repository at this point in the history
  • Loading branch information
emalfroy committed Jan 3, 2025
1 parent 683c345 commit 075f444
Show file tree
Hide file tree
Showing 15 changed files with 65 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public async Task<bool> IsDubbel(VCode vCode)
{
var verenigingState = await _eventStore.Load<VerenigingState>(vCode, null);

return verenigingState.IsDubbel;
return verenigingState.VerenigingStatus is VerenigingStatus.StatusDubbel;
}

public async Task<bool> Exists(VCode vCode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@

public record MarkeringDubbeleVerengingWerdGecorrigeerd(string VCode, string VCodeAuthentiekeVereniging, string VorigeStatus) : IEvent
{
public static MarkeringDubbeleVerengingWerdGecorrigeerd With(VCode vCode, VCode vCodeAuthentiekeVereniging, VerenigingStatus vorigeStatus)
=> new(vCode, vCodeAuthentiekeVereniging,vorigeStatus.Naam);
public static MarkeringDubbeleVerengingWerdGecorrigeerd With(VCode vCode, VerenigingStatus.StatusDubbel verenigingStatus)
=> new(vCode, verenigingStatus.VCodeAuthentiekeVereniging, verenigingStatus.StatusNaam);
}


Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@

public record WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt(string VCode, string VCodeAuthentiekeVereniging, string VorigeStatus) : IEvent
{
public static WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt With(VCode vCode, VCode vCodeAuthentiekeVereniging, VerenigingStatus vorigeStatus)
=> new(vCode, vCodeAuthentiekeVereniging,vorigeStatus.Naam);
public static WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt With(VCode vCode, VerenigingStatus.StatusDubbel verenigingStatus)
=> new(vCode, verenigingStatus.VCodeAuthentiekeVereniging, verenigingStatus.StatusNaam);
}


23 changes: 17 additions & 6 deletions src/AssociationRegistry/Vereniging/Vereniging.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ private void RegistreerWerkingsgebieden(Werkingsgebied[] teRegistrerenWerkingsge
if (werkingsgebieden.IsNietVanToepassing)
{
AddEvent(new WerkingsgebiedenWerdenNietVanToepassing(VCode));

return;
}

Expand Down Expand Up @@ -169,12 +170,14 @@ public void WijzigWerkingsgebieden(Werkingsgebied[] werkingsgebieden)
if (Werkingsgebieden.Equals(werkingsgebieden, Werkingsgebieden.NietBepaald!))
{
AddEvent(new WerkingsgebiedenWerdenNietBepaald(VCode));

return;
}

if (Werkingsgebieden.Equals(werkingsgebieden, Werkingsgebieden.NietVanToepassing!))
{
AddEvent(new WerkingsgebiedenWerdenNietVanToepassing(VCode));

return;
}

Expand Down Expand Up @@ -243,18 +246,26 @@ public void MarkeerAlsDubbelVan(VCode isDubbelVan)

public string CorrigeerMarkeringAlsDubbelVan()
{
Throw<VerenigingMoetGemarkeerdZijnAlsDubbelOmGecorrigeerdTeKunnenWorden>.If(!State.IsDubbel);
switch (State.VerenigingStatus)
{
case VerenigingStatus.StatusDubbel statusDubbel:
AddEvent(MarkeringDubbeleVerengingWerdGecorrigeerd.With(VCode, statusDubbel));

var vCodeAuthentiekeVereniging = VCode.Create(State.VCodeAuthentiekeVereniging);
AddEvent(MarkeringDubbeleVerengingWerdGecorrigeerd.With(VCode, vCodeAuthentiekeVereniging, State.VorigeVerenigingStatus));
return statusDubbel.VCodeAuthentiekeVereniging;

return vCodeAuthentiekeVereniging;
default:
throw new VerenigingMoetGemarkeerdZijnAlsDubbelOmGecorrigeerdTeKunnenWorden();
}
}

public void VerwerkWeigeringDubbelDoorAuthentiekeVereniging(VCode vCodeAuthentiekeVereniging)
{
if (State.IsDubbel)
AddEvent(WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt.With(VCode, vCodeAuthentiekeVereniging, State.VorigeVerenigingStatus));
switch (State.VerenigingStatus)
{
case VerenigingStatus.StatusDubbel statusDubbel:
AddEvent(WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt.With(VCode, statusDubbel));
break;
}
}

public void Hydrate(VerenigingState obj)
Expand Down
20 changes: 7 additions & 13 deletions src/AssociationRegistry/Vereniging/VerenigingState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,9 @@ public string Identity
public bool IsIngeschrevenOpWijzigingenUitKbo { get; private init; }
public List<string> HandledIdempotenceKeys { get; set; } = new();
public bool IsVerwijderd { get; set; }
public bool IsDubbel => VerenigingStatus == VerenigingStatus.Dubbel;
public string VCodeAuthentiekeVereniging { get; set; }
public bool IsAuthentiekeVereniging => CorresponderendeVCodes.Length != 0;
public string[] CorresponderendeVCodes { get; set; } = [];
public VerenigingStatus VerenigingStatus { get; set; }
public VerenigingStatus VorigeVerenigingStatus { get; set; }

public long Version { get; set; }

Expand Down Expand Up @@ -118,7 +115,7 @@ l.AdresId is null
h => HoofdactiviteitVerenigingsloket.Create(h.Code))
.ToArray()),
Werkingsgebieden = Werkingsgebieden.NietBepaald,
VerenigingStatus = VerenigingStatus.Actief,
VerenigingStatus = new VerenigingStatus.StatusActief(),
};

public VerenigingState Apply(VerenigingMetRechtspersoonlijkheidWerdGeregistreerd @event)
Expand All @@ -130,7 +127,7 @@ public VerenigingState Apply(VerenigingMetRechtspersoonlijkheidWerdGeregistreerd
Naam = VerenigingsNaam.Hydrate(@event.Naam),
KorteNaam = @event.KorteNaam,
Startdatum = Datum.Hydrate(@event.Startdatum),
VerenigingStatus = VerenigingStatus.Actief,
VerenigingStatus = new VerenigingStatus.StatusActief(),
};

public VerenigingState Apply(VerenigingWerdIngeschrevenOpWijzigingenUitKbo _)
Expand All @@ -152,14 +149,14 @@ public VerenigingState Apply(VerenigingWerdGestopt @event)
=> this with
{
Einddatum = Datum.Hydrate(@event.Einddatum),
VerenigingStatus = VerenigingStatus.Gestopt,
VerenigingStatus = new VerenigingStatus.StatusGestopt(),
};

public VerenigingState Apply(VerenigingWerdGestoptInKBO @event)
=> this with
{
Einddatum = Datum.Hydrate(@event.Einddatum),
VerenigingStatus = VerenigingStatus.Gestopt,
VerenigingStatus = new VerenigingStatus.StatusGestopt(),
};

public VerenigingState Apply(VerenigingWerdVerwijderd @event)
Expand Down Expand Up @@ -683,9 +680,7 @@ public VerenigingState Apply(AdresHeeftGeenVerschillenMetAdressenregister @event
public VerenigingState Apply(VerenigingWerdGemarkeerdAlsDubbelVan @event)
=> this with
{
VorigeVerenigingStatus = VerenigingStatus,
VerenigingStatus = VerenigingStatus.Dubbel,
VCodeAuthentiekeVereniging = @event.VCodeAuthentiekeVereniging,
VerenigingStatus = new VerenigingStatus.StatusDubbel(VCode.Hydrate(@event.VCodeAuthentiekeVereniging), VerenigingStatus),
};

public VerenigingState Apply(VerenigingAanvaarddeDubbeleVereniging @event)
Expand All @@ -697,8 +692,7 @@ public VerenigingState Apply(VerenigingAanvaarddeDubbeleVereniging @event)
public VerenigingState Apply(WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt @event)
=> this with
{
VerenigingStatus = VerenigingStatus.Parse(@event.VorigeStatus),
VCodeAuthentiekeVereniging = string.Empty,
VerenigingStatus = VerenigingStatus.ParseVorigeStatus(@event.VorigeStatus),
};

public void ThrowIfVerwijderd()
Expand All @@ -709,7 +703,7 @@ public void ThrowIfVerwijderd()

public void ThrowIfDubbel()
{
if (IsDubbel)
if (VerenigingStatus is VerenigingStatus.StatusDubbel)
throw new VerenigingIsDubbel(VCode);
}
}
31 changes: 14 additions & 17 deletions src/AssociationRegistry/Vereniging/VerenigingStatus.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
namespace AssociationRegistry.Vereniging;

public class VerenigingStatus
public abstract record VerenigingStatus(string StatusNaam)
{
public static readonly VerenigingStatus Actief = new("Actief");
public static readonly VerenigingStatus Gestopt = new("Gestopt");
public static readonly VerenigingStatus Dubbel = new("Dubbel");
public record StatusActief() : VerenigingStatus("Actief");
public record StatusGestopt() : VerenigingStatus("Gestopt");
public record StatusDubbel(VCode VCodeAuthentiekeVereniging, VerenigingStatus VorigeVerenigingStatus) : VerenigingStatus("Dubbel");

public string Naam { get; }
public static VerenigingStatus Actief => new StatusActief();
public static VerenigingStatus Gestopt => new StatusGestopt();

public VerenigingStatus(string naam)
public VerenigingStatus ParseVorigeStatus(string vorigeStatus)
{
Naam = naam;
switch (vorigeStatus)
{
case "Actief": return new StatusActief();
case "Gestopt": return new StatusGestopt();
default: throw new ArgumentOutOfRangeException();
}
}

public static readonly VerenigingStatus[] All =
{
Actief,
Gestopt,
Dubbel
};

public static VerenigingStatus Parse(string naam)
=> All.Single(t => t.Naam == naam);
}

Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ public async Task Then_It_Throws()
VCode = _scenario.VCode,
};

var exception = await Assert.ThrowsAsync<AuthentiekeVerenigingKanNietAlsDubbelGemarkeerdWorden>(async () => await _commandHandler.Handle(new CommandEnvelope<CorrigeerMarkeringAlsDubbelVanCommand>(command, _fixture.Create<CommandMetadata>())));
var exception = await Assert.ThrowsAsync<VerenigingMoetGemarkeerdZijnAlsDubbelOmGecorrigeerdTeKunnenWorden>(async () => await _commandHandler.Handle(new CommandEnvelope<CorrigeerMarkeringAlsDubbelVanCommand>(command, _fixture.Create<CommandMetadata>())));

exception.Message.Should().Be(ExceptionMessages.AuthentiekeVerenigingKanNietAlsDubbelGemarkeerdWorden);
exception.Message.Should().Be(ExceptionMessages.VerenigingMoetGemarkeerdZijnAlsDubbelOmGecorrigeerdTeKunnenWorden);

_martenOutbox.Verify(x => x.SendAsync(It.IsAny<AanvaardDubbeleVerenigingMessage>(), It.IsAny<DeliveryOptions>()), Times.Never);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public static void CustomizeEvents(Fixture fixture)
fixture.CustomizeRechtsvormWerdGewijzigdInKBO();
fixture.CustomizeLidmaatschapWerdToegevoegd();
fixture.CustomizeWeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt();
fixture.CustomizeVerenigingAanvaarddeDubbeleVereniging();
}

private static void CustomizeLidmaatschapWerdToegevoegd(this IFixture fixture)
Expand Down Expand Up @@ -178,7 +179,17 @@ private static void CustomizeWeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerk
() => new WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt(
fixture.Create<VCode>().ToString(),
fixture.Create<VCode>().ToString(),
VerenigingStatus.Actief.Naam
VerenigingStatus.Actief.StatusNaam
)).OmitAutoProperties());
}

private static void CustomizeVerenigingAanvaarddeDubbeleVereniging(this IFixture fixture)
{
fixture.Customize<VerenigingAanvaarddeDubbeleVereniging>(
composer => composer.FromFactory(
() => new VerenigingAanvaarddeDubbeleVereniging(
fixture.Create<VCode>().ToString(),
fixture.Create<VCode>().ToString()
)).OmitAutoProperties());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerktScenario()
WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt = fixture.Create<WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt>() with
{
VCode = DubbeleVerenigingWerdGeregistreerd.VCode,
VorigeStatus = VerenigingStatus.Actief.Naam,
VorigeStatus = VerenigingStatus.Actief.StatusNaam,
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ public void Document_IsDubbelVan_Is_Updated()

[Fact]
public void Document_Status_Is_Dubbel()
=> fixture.Result.Status.Should().Be(VerenigingStatus.Actief.Naam);
=> fixture.Result.Status.Should().Be(VerenigingStatus.Actief.StatusNaam);
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public void Document_Is_Updated()
new
{
VCode = fixture.Scenario.VCode,
VorigeStatus = VerenigingStatus.Actief.Naam,
VorigeStatus = VerenigingStatus.Actief.StatusNaam,
},
fixture.MetadataInitiator,
fixture.MetadataTijdstip));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerktScenario()
{
VCode = DubbeleVerenigingWerdGeregistreerd.VCode,
VCodeAuthentiekeVereniging = AuthentiekeVerenigingWerdGeregistreerd.VCode,
VorigeStatus = VerenigingStatus.Actief.Naam,
VorigeStatus = VerenigingStatus.Actief.StatusNaam,
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ public async Task Then_WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt_Even
await sut.Handle(command, CancellationToken.None);

repositoryMock.ShouldHaveSaved(
WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt.With(scenario.VCode, vCodeAuthentiekeVereniging, VerenigingStatus.Actief));
WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt.With(scenario.VCode, new VerenigingStatus.StatusDubbel(vCodeAuthentiekeVereniging, VerenigingStatus.Actief)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public async Task Then_WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt_Even
await sut.Handle(command, CancellationToken.None);

repositoryMock.ShouldHaveSaved(
WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt.With(scenario.VCode, vCodeAuthentiekeVereniging, VerenigingStatus.Actief));
WeigeringDubbelDoorAuthentiekeVerenigingWerdVerwerkt.With(scenario.VCode, new VerenigingStatus.StatusDubbel(vCodeAuthentiekeVereniging, VerenigingStatus.Actief)));

repositoryMock.AssertLoadingDubbel();
repositoryMock.AssertLoadingVerwijderd();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ public Given_A_Dubbele_Vereniging()

var eventStoreMock = new EventStoreMock(
fixture.Create<FeitelijkeVerenigingWerdGeregistreerd>() with { VCode = _vCode, },
fixture.Create<VerenigingWerdGemarkeerdAlsDubbelVan>() with{ VCode = _vCode});
fixture.Create<VerenigingWerdGemarkeerdAlsDubbelVan>() with{ VCode = _vCode, VCodeAuthentiekeVereniging = fixture.Create<VCode>()});

_repo = new VerenigingsRepository(eventStoreMock);
}

[Fact]
public async Task Then_A_FeitelijkeVereniging_Is_Returned()
public async Task Then_Throws_A_VerenigingIsDubbelException()
{
var exception = await
Assert.ThrowsAsync<AssociationRegistry.Vereniging.Exceptions.VerenigingIsDubbel>(async () => await _repo.Load<Vereniging>(_vCode, expectedVersion: null)) ;
Expand Down

0 comments on commit 075f444

Please sign in to comment.