private async Task ExtractArticlesFromFeed(DataSourceAggregate datasource, CancellationToken cancellationToken) { var reader = XmlReader.Create(datasource.Url); var feed = SyndicationFeed.Load(reader); reader.Close(); var result = new List <ArticleAggregate>(); foreach (var item in feed.Items.OrderBy(i => i.PublishDate)) { if (!datasource.IsArticleExtracted(item.PublishDate)) { var article = ArticleAggregate.Create(item.Id, item.Title.Text, item.Summary.Text, null, "en", datasource.Id, item.PublishDate); result.Add(article); } } if (!result.Any()) { return; } using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { foreach (var article in result) { await _articleRepository.Add(article, cancellationToken); } await _articleRepository.SaveChanges(cancellationToken); transactionScope.Complete(); } foreach (var article in result) { await _busControl.Publish((ArticleAddedEvent)article.DomainEvts.First(), cancellationToken); } // await _articleManager.TrainArticles(result.Select(r => r.Language).Distinct(), cancellationToken); var lastArticle = result.OrderByDescending(a => a.PublishDate).FirstOrDefault(); if (lastArticle != null) { datasource.AddHistory(lastArticle.PublishDate, result.Count()); } }
public Task Update(ArticleAggregate article, CancellationToken cancellationToken) { _dbContext.Articles.Update(article); return(Task.CompletedTask); }
public ArticlesController(IArticleRepository repository) { _articleActions = new ArticleAggregate(repository); }