public async Task <GetPostDbResult> ExecuteAsync(UserId requestorId, PostId postId)
        {
            postId.AssertNotNull("postId");

            var parameters = new
            {
                PostId      = postId.Value,
                RequestorId = requestorId == null ? null : (Guid?)requestorId.Value,
            };

            var query = new StringBuilder();

            query.Append(GetNewsfeedDbStatement.GetSqlStart(requestorId, GetNewsfeedDbStatement.SqlQuerySource.FullPost));
            query.Append(SqlFilter);
            query.Append(GetFilesSql);

            using (var connection = this.connectionFactory.CreateConnection())
            {
                using (var multi = await connection.QueryMultipleAsync(query.ToString(), parameters))
                {
                    var post = (await multi.ReadAsync <PreviewNewsfeedPost.Builder>()).SingleOrDefault();

                    if (post == null)
                    {
                        return(null);
                    }

                    ProcessNewsfeedResults(post);

                    var files = (await multi.ReadAsync <GetPostDbResult.PostFileDbResult.Builder>()).ToList();

                    return(new GetPostDbResult(
                               post.Build(),
                               files.Select(v => v.Build()).ToList()));
                }
            }
        }
        public async Task <GetPreviewNewsfeedDbResult> ExecuteAsync(
            UserId requestorId,
            UserId creatorId,
            IReadOnlyList <ChannelId> requestedChannelIds,
            DateTime now,
            DateTime origin,
            bool searchForwards,
            NonNegativeInt startIndex,
            PositiveInt count)
        {
            startIndex.AssertNotNull("startIndex");
            count.AssertNotNull("count");

            var parameters = new
            {
                RequestorId         = requestorId == null ? null : (Guid?)requestorId.Value,
                CreatorId           = creatorId == null ? null : (Guid?)creatorId.Value,
                RequestedChannelIds = requestedChannelIds == null ? null : requestedChannelIds.Select(v => v.Value).ToList(),
                Now        = now,
                Origin     = origin,
                StartIndex = startIndex.Value,
                Count      = count.Value
            };

            using (var connection = this.connectionFactory.CreateConnection())
            {
                var query = new StringBuilder();
                query.Append(GetNewsfeedDbStatement.GetSqlStart(requestorId, GetNewsfeedDbStatement.SqlQuerySource.PreviewNewsfeed));
                query.Append(GetNewsfeedDbStatement.CreateFilter(null, creatorId, requestedChannelIds, now, origin, searchForwards, startIndex, count, true));

                var entities = (await connection.QueryAsync <PreviewNewsfeedPost.Builder>(query.ToString(), parameters)).ToList();
                ProcessNewsfeedResults(entities);

                return(new GetPreviewNewsfeedDbResult(entities.Select(_ => _.Build()).ToList()));
            }
        }