diff --git a/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/GetDeletionProcessesQuery.cs b/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/GetDeletionProcessesQuery.cs new file mode 100644 index 0000000000..026d8826b9 --- /dev/null +++ b/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/GetDeletionProcessesQuery.cs @@ -0,0 +1,7 @@ +using MediatR; + +namespace Backbone.Modules.Devices.Application.Identities.Queries.GetDeletionProcesses; + +public class GetDeletionProcessesQuery : IRequest +{ +} diff --git a/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/GetDeletionProcessesResponse.cs b/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/GetDeletionProcessesResponse.cs new file mode 100644 index 0000000000..0afef16059 --- /dev/null +++ b/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/GetDeletionProcessesResponse.cs @@ -0,0 +1,15 @@ +using Backbone.Modules.Devices.Application.DTOs; +using Backbone.Modules.Devices.Domain.Entities.Identities; + +namespace Backbone.Modules.Devices.Application.Identities.Queries.GetDeletionProcesses; +public class GetDeletionProcessesResponse +{ + public GetDeletionProcessesResponse(IReadOnlyList processes) + { + DeletionProcesses = processes + .Select(p => new IdentityDeletionProcessDTO(p)) + .ToList(); + } + + public List DeletionProcesses { get; set; } +} diff --git a/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/Handler.cs b/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/Handler.cs new file mode 100644 index 0000000000..5b3998a6b0 --- /dev/null +++ b/Modules/Devices/src/Devices.Application/Identities/Queries/GetDeletionProcesses/Handler.cs @@ -0,0 +1,28 @@ +using Backbone.BuildingBlocks.Application.Abstractions.Exceptions; +using Backbone.BuildingBlocks.Application.Abstractions.Infrastructure.UserContext; +using Backbone.Modules.Devices.Application.Infrastructure.Persistence.Repository; +using Backbone.Modules.Devices.Domain.Entities.Identities; +using MediatR; + +namespace Backbone.Modules.Devices.Application.Identities.Queries.GetDeletionProcesses; + +public class Handler : IRequestHandler +{ + private readonly IIdentitiesRepository _identityRepository; + private readonly IUserContext _userContext; + + public Handler(IIdentitiesRepository identityRepository, IUserContext userContext) + { + _identityRepository = identityRepository; + _userContext = userContext; + } + + public async Task Handle(GetDeletionProcessesQuery request, CancellationToken cancellationToken) + { + var identity = await _identityRepository.FindByAddress(_userContext.GetAddress(), cancellationToken) ?? throw new NotFoundException(nameof(Identity)); + var processes = identity.DeletionProcesses; + var response = new GetDeletionProcessesResponse(processes); + + return response; + } +} diff --git a/Modules/Devices/src/Devices.ConsumerApi/Controllers/IdentitiesController.cs b/Modules/Devices/src/Devices.ConsumerApi/Controllers/IdentitiesController.cs index fc0647a196..834cf3547d 100644 --- a/Modules/Devices/src/Devices.ConsumerApi/Controllers/IdentitiesController.cs +++ b/Modules/Devices/src/Devices.ConsumerApi/Controllers/IdentitiesController.cs @@ -7,6 +7,7 @@ using Backbone.Modules.Devices.Application.Identities.Commands.CreateIdentity; using Backbone.Modules.Devices.Application.Identities.Commands.StartDeletionProcessAsOwner; using Backbone.Modules.Devices.Application.Identities.Queries.GetDeletionProcess; +using Backbone.Modules.Devices.Application.Identities.Queries.GetDeletionProcesses; using Backbone.Modules.Devices.Infrastructure.OpenIddict; using MediatR; using Microsoft.AspNetCore.Authorization; @@ -86,6 +87,14 @@ public async Task GetDeletionProcess([FromRoute] string id, Cance var response = await _mediator.Send(new GetDeletionProcessQuery { Id = id }, cancellationToken); return Ok(response); } + + [HttpGet("Self/DeletionProcesses")] + [ProducesResponseType(StatusCodes.Status200OK)] + public async Task GetDeletionProcesses(CancellationToken cancellationToken) + { + var response = await _mediator.Send(new GetDeletionProcessesQuery(), cancellationToken); + return Ok(response); + } } public class CreateIdentityRequest