private async Task SetTopicLastPost(PhpbbTopics topic, PhpbbPosts post, AuthenticatedUser author, bool hardReset = false) { if (hardReset || topic.TopicLastPostTime < post.PostTime) { topic.TopicLastPostId = post.PostId; topic.TopicLastPostSubject = post.PostSubject; topic.TopicLastPostTime = post.PostTime; topic.TopicLastPosterColour = author.UserColor !; topic.TopicLastPosterId = post.PosterId; topic.TopicLastPosterName = author.UserId == Constants.ANONYMOUS_USER_ID ? post.PostUsername : author.Username !; var conn = _context.GetDbConnection(); await conn.ExecuteAsync( @"UPDATE phpbb_topics SET topic_last_post_id = @TopicLastPostId, topic_last_post_subject = @TopicLastPostSubject, topic_last_post_time = @TopicLastPostTime, topic_last_poster_colour = @TopicLastPosterColour, topic_last_poster_id = @TopicLastPosterId, topic_last_poster_name = @TopicLastPosterName WHERE topic_id = @TopicId", topic ); } }
private async Task SetTopicFirstPost(PhpbbTopics topic, PhpbbPosts post, AuthenticatedUser author, bool setTopicTitle, bool goForward = false) { var conn = _context.GetDbConnection(); var curFirstPost = await conn.QueryFirstOrDefaultAsync <PhpbbPosts>("SELECT * FROM phpbb_posts WHERE post_id = @TopicFirstPostId", new { topic.TopicFirstPostId }); if (topic.TopicFirstPostId == 0 || goForward || (curFirstPost != null && curFirstPost.PostTime >= post.PostTime)) { if (setTopicTitle) { topic.TopicTitle = post.PostSubject.Replace(Constants.REPLY, string.Empty).Trim(); } topic.TopicFirstPostId = post.PostId; topic.TopicFirstPosterColour = author.UserColor !; topic.TopicFirstPosterName = author.Username !; await conn.ExecuteAsync( @"UPDATE phpbb_topics SET topic_title = @TopicTitle, topic_first_post_id = @TopicFirstPostId, topic_first_poster_colour = @TopicFirstPosterColour, topic_first_poster_name = @TopicFirstPosterName WHERE topic_id = @topicId", topic ); } }
public async Task <PollDto?> GetPoll(PhpbbTopics _currentTopic) { var options = Enumerable.Empty <PhpbbPollOptions>(); var voters = Enumerable.Empty <PollOptionVoter>(); var connection = _context.GetDbConnection(); options = await connection.QueryAsync <PhpbbPollOptions>("SELECT * FROM phpbb_poll_options WHERE topic_id = @TopicId ORDER BY poll_option_id", new { _currentTopic.TopicId }); if (options.Any()) { voters = await connection.QueryAsync <PollOptionVoter>( @"SELECT u.user_id, u.username, v.poll_option_id FROM phpbb_users u JOIN phpbb_poll_votes v ON u.user_id = v.vote_user_id WHERE v.poll_option_id IN @optionIds AND v.topic_id IN @topicIds", new { optionIds = options.Select(o => o.PollOptionId).DefaultIfEmpty(), topicIds = options.Select(o => o.TopicId).DefaultIfEmpty() } ); } else { return(null); } return(new PollDto { PollTitle = _currentTopic.PollTitle, PollStart = _currentTopic.PollStart.ToUtcTime(), PollDurationSecons = _currentTopic.PollLength, PollMaxOptions = _currentTopic.PollMaxOptions, TopicId = _currentTopic.TopicId, VoteCanBeChanged = _currentTopic.PollVoteChange.ToBool(), PollOptions = options.Select(o => new PollOption { PollOptionId = o.PollOptionId, PollOptionText = o.PollOptionText, TopicId = o.TopicId, PollOptionVoters = voters.Where(v => v.PollOptionId == o.PollOptionId).ToList() }).ToList() }); }