diff --git a/CleanArchitecture/CleanArchitecture.Application/Exceptions/ValidationException.cs b/CleanArchitecture/CleanArchitecture.Application/Exceptions/ValidationException.cs index 36abe5b..132183c 100644 --- a/CleanArchitecture/CleanArchitecture.Application/Exceptions/ValidationException.cs +++ b/CleanArchitecture/CleanArchitecture.Application/Exceptions/ValidationException.cs @@ -8,10 +8,10 @@ namespace CleanArchitecture.Application.Exceptions { Errors = new Dictionary(); } - public ValidationException(IEnumerable failures): this() - { - Errors = failures.GroupBy(e=>e.PropertyName, e => e.ErrorMessage). - ToDictionary(failureGroup => failureGroup.Key, failureGroup => failureGroup.ToArray()); + public ValidationException(IEnumerable failures): this() + { + Errors = failures.GroupBy(e=>e.PropertyName, e => e.ErrorMessage). + ToDictionary(failureGroup => failureGroup.Key, failureGroup => failureGroup.ToArray()); } public IDictionary Errors { get; } } diff --git a/CleanArchitecture/CleanArchitecture.Data/CleanArchitecture.Infrastructure.csproj b/CleanArchitecture/CleanArchitecture.Data/CleanArchitecture.Infrastructure.csproj index 1eaac1c..d9755dc 100644 --- a/CleanArchitecture/CleanArchitecture.Data/CleanArchitecture.Infrastructure.csproj +++ b/CleanArchitecture/CleanArchitecture.Data/CleanArchitecture.Infrastructure.csproj @@ -17,6 +17,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/CleanArchitecture/CleanArchitecture.Data/Email/EmailService.cs b/CleanArchitecture/CleanArchitecture.Data/Email/EmailService.cs new file mode 100644 index 0000000..cd08585 --- /dev/null +++ b/CleanArchitecture/CleanArchitecture.Data/Email/EmailService.cs @@ -0,0 +1,56 @@ +using CleanArchitecture.Application.Contracts.Infrastructure; +using CleanArchitecture.Application.Models; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using SendGrid; +using SendGrid.Helpers.Mail; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace CleanArchitecture.Infrastructure.Email +{ + public class EmailService : IEmailService + { + public EmailSettings emailSettings { get; } + public ILogger logger { get; } + + public EmailService(IOptions _emailSettings, ILogger _logger) + { + emailSettings = _emailSettings.Value; + logger = _logger; + } + + public async Task SendEmail(Application.Models.Email email) + { + var client = new SendGridClient(emailSettings.ApiKey); + + var subject = email.Subject; + var to = new EmailAddress(email.To); + var emailBody = email.Body; + + var from = new EmailAddress + { + Email = emailSettings.FromAddress, + Name = emailSettings.FromName + }; + + var sendGridMessage = MailHelper.CreateSingleEmail(from, to, subject, emailBody, emailBody); + var response = await client.SendEmailAsync(sendGridMessage); + + if(response.StatusCode == System.Net.HttpStatusCode.Accepted || response.StatusCode == System.Net.HttpStatusCode.OK) { + return true; + } + else + { + logger.LogError($"The email can not been send"); + return false; + } + + + } + } +} diff --git a/CleanArchitecture/CleanArchitecture.Data/Repositories/RepositoryBase.cs b/CleanArchitecture/CleanArchitecture.Data/Repositories/RepositoryBase.cs index e3f4ee8..0218069 100644 --- a/CleanArchitecture/CleanArchitecture.Data/Repositories/RepositoryBase.cs +++ b/CleanArchitecture/CleanArchitecture.Data/Repositories/RepositoryBase.cs @@ -48,7 +48,7 @@ namespace CleanArchitecture.Infrastructure.Repositories { IQueryable query = context.Set(); if (disableTracking) query = query.AsNoTracking(); - if (includes != null) query = includes.Aggregate(query, (current, include) => current.Include(include); + if (includes != null) query = includes.Aggregate(query, (current, include) => current.Include(include)); if(predicate != null) query = query.Where(predicate); if (orderBy!=null) return await orderBy(query).ToListAsync();