public async Task <ActionResult <IEnumerable <object> > > PostAsync([FromForm] ArticleReadViewModel feed) { _logger.LogDebug($"Marking story [{feed.StoryId}] as {(feed.Read ? "read" : "unread")} for feed {feed.FeedId}"); var newArticles = new List <Article>(); var userAccount = await _userAccountRepository.FindOrCreateAsync(User); var userFeedId = 0; if (feed.FeedId.HasValue && !feed.StoryId.HasValue) { if (!feed.MaxStoryId.HasValue || feed.MaxStoryId.Value <= 0) { feed.MaxStoryId = int.MaxValue; } _logger.LogDebug($"Marking all stories as {(feed.Read ? "read" : "unread")}: {feed.FeedId} up to id {feed.MaxStoryId}"); userFeedId = feed.FeedId.Value; var feedToMarkAllAsRead = await _userFeedRepository.GetByIdAsync(feed.FeedId.Value); if (feedToMarkAllAsRead != null && feedToMarkAllAsRead.UserAccountId == userAccount.Id) { foreach (var article in await _articleRepository.FindUnreadArticlesInUserFeedAsync(feedToMarkAllAsRead)) { if (article.Id > feed.MaxStoryId) { newArticles.Add(article); continue; } await MarkAsAsync(feedToMarkAllAsRead, article.Id, feed.Read); } } } else if (feed.StoryId.HasValue) { var article = await _articleRepository.GetByIdAsync(feed.StoryId.Value); var feedToMarkAsRead = (await _userFeedRepository.GetAllByUserAndRssFeedAsync(userAccount, article.RssFeedId)).FirstOrDefault(); if (feedToMarkAsRead != null) { userFeedId = feedToMarkAsRead.Id; await MarkAsAsync(feedToMarkAsRead, article.Id, feed.Read); } else { _logger.LogWarning($"Feed {feed.FeedId} could not be found or is not associated with the current user, will not make any changes"); } } return(newArticles .OrderBy(a => a.Published) .Select(a => new { read = false, feed = userFeedId, story = a.Id, heading = a.Heading, article = HtmlPreview.Preview(a.Body), posted = FriendlyDate.ToString(a.Published, feed.OffsetId) }) .ToList()); }
public async Task <IActionResult> ArticleRead(Guid id) { ArticleModel article = _articleRepository.Get(id); List <CommentViewModel> commentsViewList = new List <CommentViewModel>(); foreach (CommentModel item in article.Comments) { ApplicationUser user = await _userManager.FindByIdAsync(item.UserId.ToString()); commentsViewList.Add(new CommentViewModel() { Id = item.Id, Date = item.Date.ToString(), Comment = item.Comment, ArticleId = item.ArticleId, Likes = item.Likes.Count(), Name = user.UserName }); } List <CommentViewModel> orderedCommentsViewList = commentsViewList .OrderByDescending(c => c.Date) .ToList(); Markdown markdown = new Markdown(); ApplicationUser articleUser = await _userManager.FindByIdAsync(article.UserId.ToString()); var currentUser = await GetCurrentUser(); int mark = 0; if (_signInManager.IsSignedIn(User) == false) { mark = 0; } else { if (article.Marks.FirstOrDefault(x => x.UserId == new Guid(currentUser.Id)) == null) { mark = 0; } else { mark = article.Marks.First(m => m.UserId == new Guid(currentUser.Id)).Value; } } ArticleReadViewModel viewModel = new ArticleReadViewModel() { Id = article.Id, Text = markdown.Transform(article.Text), Description = article.Description, CreatedDate = article.CreatedDate, LastModifeDate = article.LastModifeDate, Specialty = article.Specialty, UserId = article.UserId, Name = article.Name, Rate = GetAverageRate(article.Marks), Comments = orderedCommentsViewList, UserName = articleUser.UserName, Tags = article.Tags.Select(t => t.Tag.Title).ToList(), YourMark = mark }; if (currentUser != null) { MarkModel userMark = article.Marks.FirstOrDefault(m => m.UserId == new Guid(currentUser.Id)); viewModel.IsAvailableRate = currentUser.Id == article.UserId.ToString(); } else { viewModel.IsAvailableRate = true; } return(View(viewModel)); }