private void ApplyWhereMessageStatement(SqlBuilder sqlBuilder, GetPairMessagesQuery query)
        {
            if (query.FromDate.HasValue)
            {
                sqlBuilder.Where(@"PM.SentDate >= @FromDate", new { FromDate = query.FromDate.Value });
            }

            sqlBuilder.Where(@"PM.Id = @PairId", new { PairId = query.PairId.Id });
        }
        public async Task <IEnumerable <PairMessageDto> > GetPairMessagesAsync(GetPairMessagesQuery query)
        {
            var sqlQuery   = @"
SELECT
	P.Id AS PairId
	,PM.No AS PairMessageNo 
	,PM.FromUserId AS FromUserId
	,PM.ToUserId AS ToUserId
	,PM.Message AS Message
	,PM.SentDate AS SentDate
FROM dbo.PairMessages AS PM
INNER JOIN dbo.Pairs AS P ON P.Id = PM.Id
/**where**/
ORDER BY PM.SentDate DESC";
            var sqlBuilder = new SqlBuilder();
            var template   = sqlBuilder.AddTemplate(sqlQuery, new { CurrentUserId = query.UserId.Id });

            ApplyWherePairStatement(sqlBuilder);
            ApplyWhereMessageStatement(sqlBuilder, query);

            await using var connection = new SqlConnection(_sqlConnectionConfiguration.MainConnectionString);
            return(await connection.QueryAsync <PairMessageDto>(template.RawSql, template.Parameters));
        }
        public async Task <IActionResult> GetMessages(Guid id, DateTime?fromDate)
        {
            var query = new GetPairMessagesQuery(_correlationContext.CurrentUser.UserId.Value, new AggregateId(id), fromDate);

            return(Ok(await _commandQueryDispatcherDecorator.DispatchAsync <GetPairMessagesQuery, ListDto <PairMessageDto> >(query)));
        }
 public async Task <ListDto <PairMessageDto> > HandleAsync(GetPairMessagesQuery query) => new ListDto <PairMessageDto>(await _pairsReadModel.GetPairMessagesAsync(query));