Files
CleanArchitecture/CleanArchitecture/CleanArchitecture.Application/Features/Streamers/Commands/CreateStreamer/CreateStreamerCommandHandler.cs
Alejandro Sarmiento 9b5ddee951 Unit tests + Dockerfile
2024-02-29 21:52:46 +01:00

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}");
}
}
}
}