diff --git a/src/AssociationRegistry/Resources/ExceptionMessages.Designer.cs b/src/AssociationRegistry/Resources/ExceptionMessages.Designer.cs
index 5c149474e..c29009e1b 100644
--- a/src/AssociationRegistry/Resources/ExceptionMessages.Designer.cs
+++ b/src/AssociationRegistry/Resources/ExceptionMessages.Designer.cs
@@ -412,6 +412,15 @@ public static string LaatsteHoofdActiviteitKanNietVerwijderdWorden {
}
}
+ ///
+ /// Looks up a localized string similar to De vereniging moet minstens 1 vertegenwoordiger hebben. Je kan de laatste vertegenwoordiger niet verwijderen..
+ ///
+ public static string LaatsteVertegenwoordigerKanNietVerwijderdWorden {
+ get {
+ return ResourceManager.GetString("LaatsteVertegenwoordigerKanNietVerwijderdWorden", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to De maatschappelijke zetel volgens KBO kan niet verwijderd worden..
///
diff --git a/src/AssociationRegistry/Resources/ExceptionMessages.resx b/src/AssociationRegistry/Resources/ExceptionMessages.resx
index 4e910f56b..4d8711231 100644
--- a/src/AssociationRegistry/Resources/ExceptionMessages.resx
+++ b/src/AssociationRegistry/Resources/ExceptionMessages.resx
@@ -229,4 +229,7 @@
De vereniging moet minstens 1 hoofdactiviteit hebben. Je kan de laatste hoofdactiviteit niet verwijderen.
+
+ De vereniging moet minstens 1 vertegenwoordiger hebben. Je kan de laatste vertegenwoordiger niet verwijderen.
+
diff --git a/src/AssociationRegistry/Vereniging/Vereniging.cs b/src/AssociationRegistry/Vereniging/Vereniging.cs
index 82d786843..17f6a074b 100644
--- a/src/AssociationRegistry/Vereniging/Vereniging.cs
+++ b/src/AssociationRegistry/Vereniging/Vereniging.cs
@@ -166,6 +166,8 @@ public void WijzigVertegenwoordiger(
public void VerwijderVertegenwoordiger(int vertegenwoordigerId)
{
+ Throw.If(State.Vertegenwoordigers.Count == 1);
+
var vertegenwoordiger = State.Vertegenwoordigers.Verwijder(vertegenwoordigerId);
AddEvent(VertegenwoordigerWerdVerwijderd.With(vertegenwoordiger));
}
diff --git a/src/AssociationRegistry/Vereniging/Vertegenwoordigers/Exceptions/LaatsteVertegenwoordigerKanNietVerwijderdWorden.cs b/src/AssociationRegistry/Vereniging/Vertegenwoordigers/Exceptions/LaatsteVertegenwoordigerKanNietVerwijderdWorden.cs
new file mode 100644
index 000000000..16711525c
--- /dev/null
+++ b/src/AssociationRegistry/Vereniging/Vertegenwoordigers/Exceptions/LaatsteVertegenwoordigerKanNietVerwijderdWorden.cs
@@ -0,0 +1,16 @@
+namespace AssociationRegistry.Vereniging.Exceptions;
+
+using Be.Vlaanderen.Basisregisters.AggregateSource;
+using System.Runtime.Serialization;
+
+[Serializable]
+public class LaatsteVertegenwoordigerKanNietVerwijderdWorden : DomainException
+{
+ public LaatsteVertegenwoordigerKanNietVerwijderdWorden() : base(ExceptionMessages.LaatsteVertegenwoordigerKanNietVerwijderdWorden)
+ {
+ }
+
+ protected LaatsteVertegenwoordigerKanNietVerwijderdWorden(SerializationInfo info, StreamingContext context) : base(info, context)
+ {
+ }
+}
diff --git a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_Removing_Vertegenwoordiger/CommandHandling/With_One_Vertegenwoordiger.cs b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_Removing_Vertegenwoordiger/CommandHandling/With_One_Vertegenwoordiger.cs
new file mode 100644
index 000000000..cd271a6bc
--- /dev/null
+++ b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_Removing_Vertegenwoordiger/CommandHandling/With_One_Vertegenwoordiger.cs
@@ -0,0 +1,39 @@
+namespace AssociationRegistry.Test.Admin.Api.FeitelijkeVereniging.When_Removing_Vertegenwoordiger.CommandHandling;
+
+using Acties.VerwijderVertegenwoordiger;
+using AssociationRegistry.Framework;
+using AutoFixture;
+using Fakes;
+using Fixtures.Scenarios.CommandHandling;
+using Framework;
+using Vereniging;
+using Vereniging.Exceptions;
+using Xunit;
+using Xunit.Categories;
+
+[UnitTest]
+public class With_One_Vertegenwoordiger
+{
+ private readonly VerenigingRepositoryMock _verenigingRepositoryMock;
+ private readonly FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario _scenario;
+ private readonly Fixture _fixture;
+
+ public With_One_Vertegenwoordiger()
+ {
+ _scenario = new FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario();
+ _verenigingRepositoryMock = new VerenigingRepositoryMock(_scenario.GetVerenigingState());
+ _fixture = new Fixture().CustomizeAdminApi();
+ }
+
+ [Fact]
+ public async Task Then_Throws_LaatsteVertegenwoordigerKanNietVerwijderdWordenException()
+ {
+ var command = new VerwijderVertegenwoordigerCommand(_scenario.VCode, _scenario.VertegenwoordigerId);
+ var commandMetadata = _fixture.Create();
+ var commandHandler = new VerwijderVertegenwoordigerCommandHandler(_verenigingRepositoryMock);
+ await Assert.ThrowsAsync(async () => await commandHandler.Handle(
+ new CommandEnvelope(
+ command, commandMetadata),
+ CancellationToken.None));
+ }
+}
diff --git a/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/CommandHandling/FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario.cs b/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/CommandHandling/FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario.cs
new file mode 100644
index 000000000..166439319
--- /dev/null
+++ b/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/CommandHandling/FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario.cs
@@ -0,0 +1,34 @@
+namespace AssociationRegistry.Test.Admin.Api.Fixtures.Scenarios.CommandHandling;
+
+using AssociationRegistry.Framework;
+using AutoFixture;
+using Events;
+using Framework;
+using Vereniging;
+
+public class FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario : CommandhandlerScenarioBase
+{
+ public FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario()
+ {
+ var fixture = new Fixture().CustomizeAdminApi();
+ VCode = fixture.Create();
+ FeitelijkeVerenigingWerdGeregistreerd = fixture.Create() with
+ {
+ VCode = VCode,
+ Vertegenwoordigers = new []{fixture.Create()}
+ };
+
+ VertegenwoordigerId = FeitelijkeVerenigingWerdGeregistreerd.Vertegenwoordigers.First().VertegenwoordigerId;
+ }
+
+ public override VCode VCode { get; }
+ public FeitelijkeVerenigingWerdGeregistreerd FeitelijkeVerenigingWerdGeregistreerd { get; }
+ public int VertegenwoordigerId { get; }
+ public override IEnumerable Events()
+ {
+ return new IEvent[]
+ {
+ FeitelijkeVerenigingWerdGeregistreerd,
+ };
+ }
+}