using AutoMapper;
using MediatR;
using Microsoft.Extensions.DependencyInjection;
using DigitalData.Core.Abstraction.Application.Repository;
using EnvelopeGenerator.Domain.Entities;
using EnvelopeGenerator.Application.Common.Dto;
using EnvelopeGenerator.Application.Common.Interfaces.SQLExecutor;
namespace EnvelopeGenerator.Application.Envelopes.Commands;
///
///
///
public class CreateEnvelopeCommandHandler : IRequestHandler
{
private readonly IServiceProvider _provider;
private IEnvelopeExecutor Executor => _provider.GetRequiredService();
private IRepository Repository => _provider.GetRequiredService>();
private readonly IMapper _mapper;
///
///
///
///
///
public CreateEnvelopeCommandHandler(IServiceProvider provider, IMapper mapper)
{
_provider = provider;
_mapper = mapper;
}
///
///
///
///
///
///
public async Task Handle(CreateEnvelopeCommand request, CancellationToken cancel)
{
var envelope = request.UseSQLExecutor
? await Executor.CreateEnvelopeAsync(request.UserId, request.Title, request.Message, request.TFAEnabled, cancel)
: await Repository.CreateAsync(request, cancel);
return _mapper.Map(envelope);
}
}