88using Microsoft . AspNetCore . Mvc ;
99using System ;
1010using System . Collections . Generic ;
11+ using System . Linq ;
1112using System . Threading . Tasks ;
1213
1314namespace 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 ;
0 commit comments