Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: or-2516 implement deleting a lidmaatschap #988

Merged
merged 2 commits into from
Oct 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
namespace AssociationRegistry.Admin.Api.Verenigingen.Lidmaatschap.VerwijderLidmaatschap;

using Acties.VerwijderLidmaatschap;
using Asp.Versioning;
using Be.Vlaanderen.Basisregisters.Api;
using Be.Vlaanderen.Basisregisters.Api.Exceptions;
using Framework;
using Hosts.Configuration.ConfigurationBindings;
using Infrastructure;
using Infrastructure.Extensions;
using Infrastructure.Middleware;
using Infrastructure.Swagger.Annotations;
using Infrastructure.Swagger.Examples;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Filters;
using Vereniging;
using Wolverine;
using ProblemDetails = Be.Vlaanderen.Basisregisters.BasicApiProblem.ProblemDetails;
using ValidationProblemDetails = Be.Vlaanderen.Basisregisters.BasicApiProblem.ValidationProblemDetails;
Expand Down Expand Up @@ -69,12 +73,15 @@ public async Task<IActionResult> VerwijderLidmaatschap(
[FromServices] ICommandMetadataProvider metadataProvider,
[FromHeader(Name = "If-Match")] string? ifMatch = null)
{
// var metaData = metadataProvider.GetMetadata(IfMatchParser.ParseIfMatch(ifMatch));
// var envelope = new CommandEnvelope<VerwijderLidmaatschapCommand>(request.ToCommand(vCode, lidmaatschapId), metaData);
// var commandResult = await _messageBus.InvokeAsync<EntityCommandResult>(envelope);
//
// return this.AcceptedEntityCommand(_appSettings, WellKnownHeaderEntityNames.Lidmaatschappen, commandResult);
var metaData = metadataProvider.GetMetadata(IfMatchParser.ParseIfMatch(ifMatch));
var envelope = new CommandEnvelope<VerwijderLidmaatschapCommand>(
new VerwijderLidmaatschapCommand(VCode.Create(vCode), new LidmaatschapId(lidmaatschapId)),
metaData);
var commandResult = await _messageBus.InvokeAsync<CommandResult>(envelope);

return new EmptyResult();
Response.AddSequenceHeader(commandResult.Sequence);
Response.AddETagHeader(commandResult.Version);

return Accepted();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ public class VoegLidmaatschapToeRequest
public string Beschrijving { get; set; }

public VoegLidmaatschapToeCommand ToCommand(string vCode) => new(
VCode: VCode.Create(vCode),
Lidmaatschap.Create(VCode.Create(AndereVereniging),
new Geldigheidsperiode(new GeldigVan(Van), new GeldigTot(Tot)),
Identificatie,
Beschrijving
)
);
VCode.Create(vCode),
new VoegLidmaatschapToeCommand.ToeTeVoegenLidmaatschap(
VCode.Create(AndereVereniging),
new Geldigheidsperiode(new GeldigVan(Van), new GeldigTot(Tot)),
Identificatie,
Beschrijving
));
}
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,9 @@ public async Task Project(IEvent<AdresHeeftGeenVerschillenMetAdressenregister> @
public async Task Project(IEvent<LidmaatschapWerdToegevoegd> @event, IDocumentOperations ops)
=> await Update(@event, ops, BeheerVerenigingDetailProjector.Apply);

public async Task Project(IEvent<LidmaatschapWerdVerwijderd> @event, IDocumentOperations ops)
=> await Update(@event, ops, BeheerVerenigingDetailProjector.Apply);

private async Task SoftDelete(string? streamKey, IDocumentOperations ops)
=> ops.Delete<BeheerVerenigingDetailDocument>(streamKey);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public static BeheerVerenigingDetailDocument Create(IEvent<FeitelijkeVerenigingW
HoofdactiviteitenVerenigingsloket = feitelijkeVerenigingWerdGeregistreerd.Data
.HoofdactiviteitenVerenigingsloket
.Select(BeheerVerenigingDetailMapper
.MapHoofdactiviteitVerenigingsloket)
.MapHoofdactiviteitVerenigingsloket)
.ToArray(),
Werkingsgebieden = feitelijkeVerenigingWerdGeregistreerd.Data
.Werkingsgebieden?
Expand Down Expand Up @@ -208,10 +208,9 @@ public static void Apply(
BeheerVerenigingDetailDocument document)
{
document.Werkingsgebieden = werkingsgebiedenWerdenGewijzigd.Data.Werkingsgebieden
.Select(BeheerVerenigingDetailMapper.MapWerkingsgebied).ToArray();
.Select(BeheerVerenigingDetailMapper.MapWerkingsgebied).ToArray();
}


public static void Apply(
IEvent<VertegenwoordigerWerdToegevoegd> vertegenwoordigerWerdToegevoegd,
BeheerVerenigingDetailDocument document)
Expand Down Expand Up @@ -688,11 +687,19 @@ public static void Apply(

public static void Apply(IEvent<LidmaatschapWerdToegevoegd> lidmaatschapWerdToegevoegd, BeheerVerenigingDetailDocument document)
{
document.Lidmaatschappen = document.Lidmaatschappen
.Append(BeheerVerenigingDetailMapper.MapLidmaatschap(
lidmaatschapWerdToegevoegd.Data.Lidmaatschap,
document.VCode))
.OrderBy(l => l.LidmaatschapId)
.ToArray();
}

public static void Apply(IEvent<LidmaatschapWerdVerwijderd> lidmaatschapWerdToegevoegd, BeheerVerenigingDetailDocument document)
{
document.Lidmaatschappen = document.Lidmaatschappen
.Append(BeheerVerenigingDetailMapper.MapLidmaatschap(lidmaatschapWerdToegevoegd.Data.Lidmaatschap,
document.VCode))
.OrderBy(l => l.LidmaatschapId)
.ToArray();
.Where(l => l.LidmaatschapId != lidmaatschapWerdToegevoegd.Data.Lidmaatschap.LidmaatschapId)
.OrderBy(l => l.LidmaatschapId)
.ToArray();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
namespace AssociationRegistry.Acties.VerwijderLidmaatschap;

using Vereniging;

public record VerwijderLidmaatschapCommand(VCode VCode, LidmaatschapId LidmaatschapId);
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
namespace AssociationRegistry.Acties.VerwijderLidmaatschap;

using Framework;
using Vereniging;

public class VerwijderLidmaatschapCommandHandler
{
private readonly IVerenigingsRepository _verenigingRepository;

public VerwijderLidmaatschapCommandHandler(IVerenigingsRepository verenigingRepository)
{
_verenigingRepository = verenigingRepository;
}

public async Task<CommandResult> Handle(
CommandEnvelope<VerwijderLidmaatschapCommand> envelope,
CancellationToken cancellationToken = default)
{
var vereniging =
await _verenigingRepository.Load<VerenigingOfAnyKind>(
VCode.Create(envelope.Command.VCode),
envelope.Metadata.ExpectedVersion);

vereniging.VerwijderLidmaatschap(envelope.Command.LidmaatschapId);

var result = await _verenigingRepository.Save(vereniging, envelope.Metadata, cancellationToken);

return CommandResult.Create(VCode.Create(envelope.Command.VCode), result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,14 @@

using Vereniging;

public record VoegLidmaatschapToeCommand(VCode VCode, Lidmaatschap Lidmaatschap);
public record VoegLidmaatschapToeCommand(
VCode VCode,
VoegLidmaatschapToeCommand.ToeTeVoegenLidmaatschap Lidmaatschap)
{
public record ToeTeVoegenLidmaatschap(
VCode AndereVereniging,
Geldigheidsperiode Geldigheidsperiode,
string Identificatie,
string Beschrijving);
}

Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
namespace AssociationRegistry.Events;

using Framework;
using System.Runtime.Serialization;
using Vereniging;
using Vereniging.Bronnen;

public record LidmaatschapWerdToegevoegd(Registratiedata.Lidmaatschap Lidmaatschap) : IEvent
public record LidmaatschapWerdToegevoegd(string VCode, Registratiedata.Lidmaatschap Lidmaatschap) : IEvent
{
public static LidmaatschapWerdToegevoegd With(Lidmaatschap lidmaatschap)
public static LidmaatschapWerdToegevoegd With(VCode vCode ,Lidmaatschap lidmaatschap)
=> new(
vCode,
Registratiedata.Lidmaatschap.With(lidmaatschap)
);
}
11 changes: 11 additions & 0 deletions src/AssociationRegistry/Events/LidmaatschapWerdVerwijderd.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace AssociationRegistry.Events;

using Framework;
using Vereniging;

public record LidmaatschapWerdVerwijderd(string VCode,
Registratiedata.Lidmaatschap Lidmaatschap) : IEvent
{
public static LidmaatschapWerdVerwijderd With(VCode vCode, Lidmaatschap lidmaatschap)
=> new(vCode, Registratiedata.Lidmaatschap.With(lidmaatschap));
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions src/AssociationRegistry/Resources/ExceptionMessages.resx
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,9 @@
<data name="LidmaatschapMagNietVerwijzenNaarEigenVereniging">
<value>Een lidmaatschap mag niet verwijzen naar de vereniging waarbij hij wordt toegevoegd.</value>
</data>
<data name="LidmaatschapIsNietGekend">
<value>Lidmaatschap met lidmaatschapId '{0}' is niet gekend</value>
</data>
<data name="VerenigingWerdVerwijderd">
<value>Deze vereniging werd verwijderd.</value>
</data>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace AssociationRegistry.Vereniging.Exceptions;

using Be.Vlaanderen.Basisregisters.AggregateSource;
using Resources;
using System.Runtime.Serialization;

[Serializable]
public class LidmaatschapIsNietGekend : DomainException
{
public LidmaatschapIsNietGekend(string lidmaatschapId) : base(string.Format(ExceptionMessages.LidmaatschapIsNietGekend, lidmaatschapId))
{
}

protected LidmaatschapIsNietGekend(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
namespace AssociationRegistry.Vereniging;

using Acties.VoegLidmaatschapToe;

public record Lidmaatschap
{
public int LidmaatschapId { get; init; }
public LidmaatschapId LidmaatschapId { get; init; }
public VCode AndereVereniging { get; init; }
public Geldigheidsperiode Geldigheidsperiode { get; init; }
public string Identificatie { get; init; }
public string Beschrijving { get; init; }

private Lidmaatschap(VCode andereVereniging, Geldigheidsperiode geldigheidsperiode, string identificatie, string beschrijving)
{
AndereVereniging = andereVereniging;
Geldigheidsperiode = geldigheidsperiode;
Identificatie = identificatie;
Beschrijving = beschrijving;
}

public static Lidmaatschap Create(
private Lidmaatschap(
LidmaatschapId lidmaatschapId,
VCode andereVereniging,
Geldigheidsperiode geldigheidsperiode,
string identificatie,
string beschrijving)
{
return new Lidmaatschap(andereVereniging, geldigheidsperiode, identificatie, beschrijving);
LidmaatschapId = lidmaatschapId;
AndereVereniging = andereVereniging;
Geldigheidsperiode = geldigheidsperiode;
Identificatie = identificatie;
Beschrijving = beschrijving;
}

public static Lidmaatschap Hydrate(
Expand All @@ -31,10 +30,7 @@ public static Lidmaatschap Hydrate(
Geldigheidsperiode geldigheidsperiode,
string identificatie,
string beschrijving)
=> new(andereVereniging, geldigheidsperiode, identificatie, beschrijving)
{
LidmaatschapId = lidmaatschapId
};
=> new(new LidmaatschapId(lidmaatschapId), andereVereniging, geldigheidsperiode, identificatie, beschrijving);

public virtual bool Equals(Lidmaatschap? other)
{
Expand All @@ -58,4 +54,13 @@ public virtual bool Equals(Lidmaatschap? other)

public override int GetHashCode()
=> HashCode.Combine(LidmaatschapId, AndereVereniging, Geldigheidsperiode, Identificatie, Beschrijving);

public static Lidmaatschap Create(
LidmaatschapId lidmaatschapId,
VoegLidmaatschapToeCommand.ToeTeVoegenLidmaatschap lidmaatschap)
=> new(lidmaatschapId,
lidmaatschap.AndereVereniging,
lidmaatschap.Geldigheidsperiode,
lidmaatschap.Identificatie,
lidmaatschap.Beschrijving);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace AssociationRegistry.Vereniging;

using Be.Vlaanderen.Basisregisters.AggregateSource;

public class LidmaatschapId : IntegerValueObject<LidmaatschapId>
{
public static readonly LidmaatschapId InitialId = new(1);
public LidmaatschapId Next
=> new LidmaatschapId(Value + 1);
public LidmaatschapId(int id) : base(id)
{
}

public static LidmaatschapId Max(LidmaatschapId id1, LidmaatschapId id2)
=> new(Math.Max(id1.Value, id2.Value));
}
Loading
Loading