58 lines
2.3 KiB
C#
58 lines
2.3 KiB
C#
using AutoMapper;
|
|
using CleanArchitecture.Application.Contracts.Infrastructure;
|
|
using CleanArchitecture.Application.Contracts.Persistence;
|
|
using CleanArchitecture.Application.Models;
|
|
using CleanArchitecture.Domain;
|
|
using MediatR;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace CleanArchitecture.Application.Features.Streamers.Commands.CreateStreamer
|
|
{
|
|
public class CreateStreamerCommandHandler(IUnitOfWork _unitOfWork, IMapper _mapper,
|
|
IEmailService _emailService, ILogger<CreateStreamerCommandHandler> _logger) :
|
|
IRequestHandler<CreateStreamerCommand, Streamer>
|
|
{
|
|
private readonly IUnitOfWork unitOfWork = _unitOfWork;
|
|
private readonly IMapper mapper = _mapper;
|
|
private readonly IEmailService emailService = _emailService;
|
|
private readonly ILogger<CreateStreamerCommandHandler> logger = _logger;
|
|
|
|
public async Task<Streamer> Handle(CreateStreamerCommand request, CancellationToken cancellationToken)
|
|
{
|
|
var streamerEntity = mapper.Map<Streamer>(request);
|
|
unitOfWork.StreamerRepository.AddEntity(streamerEntity);
|
|
var response = await unitOfWork.Complete();
|
|
if(response > 0)
|
|
{
|
|
logger.LogInformation($"Streamer {streamerEntity.Id} is successfully created.");
|
|
await SendEmail(streamerEntity);
|
|
return streamerEntity;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Failed to create the streamer.");
|
|
}
|
|
|
|
}
|
|
|
|
private async Task SendEmail(Streamer streamer)
|
|
{
|
|
var email = new Email()
|
|
{
|
|
To = "alejandro@asarmiento.es",
|
|
Body = $"Nueva compañia de streamer fue creada. Id: {streamer.Id}",
|
|
Subject = "Mensaje de alerta"
|
|
};
|
|
|
|
try
|
|
{
|
|
await emailService.SendEmail(email);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.LogError($"Ha ocurrido un error al enviar el email. Error: {ex.Message}");
|
|
}
|
|
}
|
|
}
|
|
}
|