diff --git a/src/ReC.Application/RecActions/Commands/CreateRecActionCommand.cs b/src/ReC.Application/RecActions/Commands/CreateRecActionCommand.cs index 7cd8a86..99ee52d 100644 --- a/src/ReC.Application/RecActions/Commands/CreateRecActionCommand.cs +++ b/src/ReC.Application/RecActions/Commands/CreateRecActionCommand.cs @@ -1,12 +1,18 @@ -namespace ReC.Application.RecActions.Commands; +using DigitalData.Core.Abstraction.Application.Repository; +using DigitalData.Core.Exceptions; +using MediatR; +using ReC.Application.Endpoints.Commands; +using ReC.Domain.Entities; -public record CreateRecActionCommand +namespace ReC.Application.RecActions.Commands; + +public record CreateRecActionCommand : IRequest { public long ProfileId { get; init; } public bool Active { get; init; } = true; - public long? EndpointId { get; init; } + public long? EndpointId { get; set; } public string? EndpointUri { get; init; } @@ -15,4 +21,19 @@ public record CreateRecActionCommand public string? HeaderQuery { get; init; } public string BodyQuery { get; init; } = "SELECT NULL AS REQUEST_BODY;"; +} + +public class CreateRecActionCommandHandler(ISender sender) : IRequestHandler +{ + public async Task Handle(CreateRecActionCommand request, CancellationToken cancel) + { + if(request.EndpointId is null) + if(request.EndpointUri is string endpointUri) + { + var endpoint = await sender.Send(new GetOrCreateCommand { Uri = endpointUri }, cancel); + request.EndpointId = endpoint.Id; + } + else + throw new BadRequestException("Either EndpointId or EndpointUri must be provided."); + } } \ No newline at end of file