public async Task <IEnumerable <PostViewModel> > Handle(ForwardPostsCommand request, CancellationToken cancellationToken) { // 被转发的帖子对象list var toBeForwardedPosts = await _postRepository.GetPostsAsync(request.ForwardPostIds); // 被转发的帖子转发过的原始帖子对象list var originalPosts = await _postRepository.GetPostsAsync(toBeForwardedPosts.Where(p => p.ForwardedPostId != null).Select(p => p.ForwardedPostId.Value).ToList()); var myId = Guid.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value); var me = await _userRepository.GetByIdAsync(myId); var posts = new List <Domain.AggregatesModel.PostAggregate.Post>(); toBeForwardedPosts.ForEach(toBeForwardedPost => { // 创建新帖子 var score = (DateTime.Now - DateTime.UnixEpoch.AddSeconds(me.CreatedTime)).TotalHours <= _scoreRewardSettings.NewUserHour ? me.PostScore + _scoreRewardSettings.NewUserPost : me.PostScore; var post = Domain.AggregatesModel.PostAggregate.Post.CreatePost(request.Text, request.Commentable, request.ForwardType, request.ShareType, request.Visibility, request.ViewPassword, request.SystemTag, request.PublicTags, request.PrivateTag, null, request.Latitude, request.Longitude, request.LocationName, request.Address, request.CityCode, request.FriendIds, null, score, myId, request.ShowOriginalText); post.SetForwardPostId(toBeForwardedPost); _postRepository.Add(post); posts.Add(post); // 增加被转发帖子的转发数和积分 toBeForwardedPost.IncreaseForwardCount(_scoreRewardSettings.ForwardPost); // 被转发帖子是转发贴时,还要增加原始帖的转发数和积分 if (toBeForwardedPost.ForwardedPostId != null) { var originalPost = originalPosts.FirstOrDefault(p => p.Id == toBeForwardedPost.ForwardedPostId.Value); originalPost.IncreaseForwardCount(_scoreRewardSettings.ForwardPost); } }); if (await _postRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken)) { var forwardInfos = new List <ForwardInfo>(); foreach (var post in posts) { var forwardedPost = toBeForwardedPosts.FirstOrDefault(p => p.Id == post.ForwardedPostId.Value); if (forwardedPost == null) { forwardedPost = originalPosts.FirstOrDefault(p => p.Id == post.ForwardedPostId.Value); } // 如果帖子为审核通过,取得新帖和被转发帖中被@的用户id以便发送被@通知 IEnumerable <Guid> atUserIds = new List <Guid>(); if (post.PostAuthStatus == PostAuthStatus.Authenticated) { atUserIds = await _postQueries.GetAtUserIdsAsync(post); } forwardInfos.Add(new ForwardInfo { ForwardUserId = myId, OriginalPostUserId = forwardedPost.UserId, OriginalPostId = post.ForwardedPostId.Value, NewPostId = post.Id, AtUserIds = atUserIds }); } await SendPostForwardedEventAsync(forwardInfos); } return(await _postQueries.GetPostsAsync(posts.Select(p => p.Id).ToList())); }
public async Task <IActionResult> GetPosts(Guid blogId) { var posts = await postQueries.GetPostsAsync(blogId); return(Ok(posts)); }