Skip to content

Commit fb8eeb3

Browse files
committed
Mail service to work with newsletters
1 parent e65e0af commit fb8eeb3

File tree

3 files changed

+41
-6
lines changed

3 files changed

+41
-6
lines changed

src/Core/Api/PostsController.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.AspNetCore.Mvc;
99
using System;
1010
using System.Collections.Generic;
11+
using System.Linq;
1112
using System.Threading.Tasks;
1213

1314
namespace Core.Api
@@ -17,10 +18,12 @@ namespace Core.Api
1718
public class PostsController : ControllerBase
1819
{
1920
IDataService _data;
21+
IEmailService _email;
2022

21-
public PostsController(IDataService data)
23+
public PostsController(IDataService data, IEmailService email)
2224
{
2325
_data = data;
26+
_email = email;
2427
}
2528

2629
/// <summary>
@@ -202,6 +205,10 @@ public async Task<ActionResult> Publish(int id, string flag)
202205
}
203206
await Task.CompletedTask;
204207

208+
if(flag == "P")
209+
{
210+
await SendNewsletters(post);
211+
}
205212
return Ok(Resources.Updated);
206213
}
207214
catch (Exception ex)
@@ -252,8 +259,21 @@ public async Task<ActionResult<PostItem>> Post(PostItem post)
252259
{
253260
try
254261
{
262+
bool alreadyPublished = false;
263+
if (post.Id > 0)
264+
{
265+
var existing = _data.BlogPosts.Single(p => p.Id == post.Id);
266+
alreadyPublished = existing.Published > DateTime.MinValue;
267+
}
255268
post.Slug = await GetSlug(post.Id, post.Title);
256269
var saved = await _data.BlogPosts.SaveItem(post);
270+
271+
if(post.IsPublished && !alreadyPublished)
272+
{
273+
var savedPost = _data.BlogPosts.Single(p => p.Id == saved.Id);
274+
await SendNewsletters(savedPost);
275+
}
276+
257277
return Created($"admin/posts/edit?id={saved.Id}", saved);
258278
}
259279
catch (Exception ex)
@@ -321,6 +341,20 @@ async Task<string> GetSlug(int id, string title)
321341
return await Task.FromResult(slug);
322342
}
323343

344+
async Task SendNewsletters(BlogPost post)
345+
{
346+
var pager = new Pager(1, 1000);
347+
IEnumerable<Newsletter> newsletters;
348+
newsletters = await _data.Newsletters.GetList(e => e.Id > 0, pager);
349+
350+
var emails = newsletters.Select(i => i.Email).ToList();
351+
if (emails != null && emails.Count > 0)
352+
{
353+
var siteUrl = $"{Request.Scheme}://{Request.Host}{Request.PathBase}";
354+
await _email.SendNewsletters(post, emails, siteUrl);
355+
}
356+
}
357+
324358
int GetUserId(string author)
325359
{
326360
int id = 0;

src/Core/Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp2.2</TargetFramework>
5-
<Version>2.4.0.7</Version>
5+
<Version>2.4.0.8</Version>
66
</PropertyGroup>
77

88
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

src/Core/Services/SendGridService.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace Core.Services
1010
{
1111
public interface IEmailService
1212
{
13-
Task SendNewsletters(PostItem postItem, List<string> emails, string siteUrl);
13+
Task SendNewsletters(BlogPost postItem, List<string> emails, string siteUrl);
1414
Task SendEmail(string to, string subject, string content);
1515
}
1616

@@ -29,9 +29,10 @@ public SendGridService(IDataService db, IConfiguration config, ILogger<SendGridS
2929
_storage = storage;
3030
}
3131

32-
public async Task SendNewsletters(PostItem post, List<string> emails, string siteUrl)
32+
public async Task SendNewsletters(BlogPost post, List<string> emails, string siteUrl)
3333
{
3434
var blog = await _db.CustomFields.GetBlogSettings();
35+
var author = _db.Authors.Single(a => a.Id == post.AuthorId);
3536
foreach (var email in emails)
3637
{
3738
var subject = post.Title;
@@ -47,7 +48,7 @@ public async Task SendNewsletters(PostItem post, List<string> emails, string sit
4748
post.Slug, // 6
4849
post.Published, // 7
4950
post.Cover, // 8
50-
post.Author, // 9
51+
author.DisplayName, // 9
5152
siteUrl); // 10
5253

5354
await SendEmail(email, subject, htmlContent);
@@ -62,7 +63,7 @@ public async Task SendEmail(string to, string subject, string content)
6263
{
6364
var apiKey = section.GetValue<string>("SendGridApiKey");
6465

65-
if (!string.IsNullOrEmpty(apiKey))
66+
if (!string.IsNullOrEmpty(apiKey) && apiKey != "YOUR-SENDGRID-API-KEY")
6667
{
6768
try
6869
{

0 commit comments

Comments
 (0)