Skip to content

Commit 2d129ee

Browse files
Consumer Api: Decompose Relationships during Identity Deletion (#940)
* feat: Add relationship audit log reason for decomposition due to identity deletion * feat: Make relationship participants writable internally and write skeleton decomposition method * chore: Rename DeleteRelationshipsOfIdentityCommand to DecomposeRelationshipsOfIdentityCommand * feat: Make CreatedBy property in Relationship Audit Log nullable * chore: Clear cache when deleting Relationships and Relationship Templates * fix: Include every properties when querying for relationships * feat: Add method to decompose relationship due to identity deletion * feat: Add methods and command for anonymizing a relationship * feat: Use the decomposition and anonymization commands * chore: Rename tests, methods and variables, resolve pr comments * chore: Merge Decomposition and Anonymization into one command * chore: Remove cache clearing from repositories * chore: Write unit tests for Relationship Decomposition due to Identity Deletion and Anonymization * chore: Include Anonymization method in the Decomposition, remove unnecessary tests * chore: Add unit test for anonymization# * fix: Fix formatting --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 3e6d810 commit 2d129ee

22 files changed

+869
-95
lines changed

Modules/Relationships/src/Relationships.Application/Identities/IdentityDeleter.Tests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Backbone.BuildingBlocks.Application.Identities;
2-
using Backbone.Modules.Relationships.Application.Relationships.Commands.DeleteRelationshipsOfIdentity;
2+
using Backbone.Modules.Relationships.Application.Relationships.Commands.DecomposeAndAnonymizeRelationshipsOfIdentity;
33
using Backbone.Modules.Relationships.Application.RelationshipTemplates.Commands.AnonymizeRelationshipTemplateAllocationsAllocatedByIdentity;
44
using Backbone.Modules.Relationships.Application.RelationshipTemplates.Commands.DeleteRelationshipTemplatesOfIdentity;
55
using FakeItEasy;
@@ -23,7 +23,7 @@ public async Task Deleter_calls_correct_command()
2323

2424
// Assert
2525
A.CallTo(() => mockMediator.Send(
26-
A<DeleteRelationshipsOfIdentityCommand>.That.Matches(i => i.IdentityAddress == identityAddress),
26+
A<DecomposeAndAnonymizeRelationshipsOfIdentityCommand>.That.Matches(i => i.IdentityAddress == identityAddress),
2727
A<CancellationToken>._)).MustHaveHappenedOnceExactly();
2828
A.CallTo(() => mockMediator.Send(
2929
A<DeleteRelationshipTemplatesOfIdentityCommand>.That.Matches(i => i.IdentityAddress == identityAddress),

Modules/Relationships/src/Relationships.Application/Identities/IdentityDeleter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using Backbone.BuildingBlocks.Application.Identities;
22
using Backbone.DevelopmentKit.Identity.ValueObjects;
3-
using Backbone.Modules.Relationships.Application.Relationships.Commands.DeleteRelationshipsOfIdentity;
3+
using Backbone.Modules.Relationships.Application.Relationships.Commands.DecomposeAndAnonymizeRelationshipsOfIdentity;
44
using Backbone.Modules.Relationships.Application.RelationshipTemplates.Commands.AnonymizeRelationshipTemplateAllocationsAllocatedByIdentity;
55
using Backbone.Modules.Relationships.Application.RelationshipTemplates.Commands.DeleteRelationshipTemplatesOfIdentity;
66
using MediatR;
@@ -20,7 +20,7 @@ public IdentityDeleter(IMediator mediator, IDeletionProcessLogger deletionProces
2020

2121
public async Task Delete(IdentityAddress identityAddress)
2222
{
23-
await _mediator.Send(new DeleteRelationshipsOfIdentityCommand(identityAddress));
23+
await _mediator.Send(new DecomposeAndAnonymizeRelationshipsOfIdentityCommand(identityAddress));
2424
await _deletionProcessLogger.LogDeletion(identityAddress, "Relationships");
2525
await _mediator.Send(new DeleteRelationshipTemplatesOfIdentityCommand(identityAddress));
2626
await _deletionProcessLogger.LogDeletion(identityAddress, "RelationshipTemplates");
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using MediatR;
2+
3+
namespace Backbone.Modules.Relationships.Application.Relationships.Commands.DecomposeAndAnonymizeRelationshipsOfIdentity;
4+
5+
public class DecomposeAndAnonymizeRelationshipsOfIdentityCommand : IRequest
6+
{
7+
public DecomposeAndAnonymizeRelationshipsOfIdentityCommand(string identityAddress)
8+
{
9+
IdentityAddress = identityAddress;
10+
}
11+
12+
public string IdentityAddress { get; set; }
13+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using Backbone.Modules.Relationships.Application.Infrastructure.Persistence.Repository;
2+
using Backbone.Modules.Relationships.Domain.Aggregates.Relationships;
3+
using FakeItEasy;
4+
using Microsoft.Extensions.Options;
5+
6+
namespace Backbone.Modules.Relationships.Application.Relationships.Commands.DecomposeAndAnonymizeRelationshipsOfIdentity;
7+
8+
public class HandlerTests : AbstractTestsBase
9+
{
10+
[Fact]
11+
public async Task Command_calls_update_on_repository()
12+
{
13+
// Arrange
14+
var mockRelationshipTemplatesRepository = A.Fake<IRelationshipsRepository>();
15+
var mockOptions = A.Dummy<IOptions<ApplicationOptions>>();
16+
17+
var handler = new Handler(mockRelationshipTemplatesRepository, mockOptions);
18+
var request = new DecomposeAndAnonymizeRelationshipsOfIdentityCommand(CreateRandomIdentityAddress());
19+
20+
// Act
21+
await handler.Handle(request, CancellationToken.None);
22+
23+
// Assert
24+
A.CallTo(() => mockRelationshipTemplatesRepository.Update(A<IEnumerable<Relationship>>._)).MustHaveHappened();
25+
}
26+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Backbone.Modules.Relationships.Application.Infrastructure.Persistence.Repository;
2+
using Backbone.Modules.Relationships.Domain.Aggregates.Relationships;
3+
using MediatR;
4+
using Microsoft.Extensions.Options;
5+
6+
namespace Backbone.Modules.Relationships.Application.Relationships.Commands.DecomposeAndAnonymizeRelationshipsOfIdentity;
7+
8+
public class Handler : IRequestHandler<DecomposeAndAnonymizeRelationshipsOfIdentityCommand>
9+
{
10+
private readonly IRelationshipsRepository _relationshipsRepository;
11+
private readonly ApplicationOptions _applicationOptions;
12+
13+
public Handler(IRelationshipsRepository relationshipsRepository, IOptions<ApplicationOptions> applicationOptions)
14+
{
15+
_relationshipsRepository = relationshipsRepository;
16+
_applicationOptions = applicationOptions.Value;
17+
}
18+
19+
public async Task Handle(DecomposeAndAnonymizeRelationshipsOfIdentityCommand request, CancellationToken cancellationToken)
20+
{
21+
var relationships = (await _relationshipsRepository.FindRelationships(Relationship.HasParticipant(request.IdentityAddress), cancellationToken)).ToList();
22+
23+
foreach (var relationship in relationships)
24+
relationship.DecomposeDueToIdentityDeletion(request.IdentityAddress, _applicationOptions.DidDomainName);
25+
26+
await _relationshipsRepository.Update(relationships);
27+
}
28+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using Backbone.BuildingBlocks.Application.Extensions;
2+
using Backbone.DevelopmentKit.Identity.ValueObjects;
3+
using FluentValidation;
4+
5+
namespace Backbone.Modules.Relationships.Application.Relationships.Commands.DecomposeAndAnonymizeRelationshipsOfIdentity;
6+
7+
public class Validator : AbstractValidator<DecomposeAndAnonymizeRelationshipsOfIdentityCommand>
8+
{
9+
public Validator()
10+
{
11+
RuleFor(x => x.IdentityAddress).ValidId<DecomposeAndAnonymizeRelationshipsOfIdentityCommand, IdentityAddress>();
12+
}
13+
}

Modules/Relationships/src/Relationships.Application/Relationships/Commands/DeleteRelationshipsOfIdentity/DeleteRelationshipsOfIdentityCommand.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.

Modules/Relationships/src/Relationships.Application/Relationships/Commands/DeleteRelationshipsOfIdentity/Handler.Tests.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

Modules/Relationships/src/Relationships.Application/Relationships/Commands/DeleteRelationshipsOfIdentity/Handler.cs

Lines changed: 0 additions & 20 deletions
This file was deleted.

Modules/Relationships/src/Relationships.Application/Relationships/Commands/DeleteRelationshipsOfIdentity/Validator.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)