public async Task <MessagePage> Handle(MessagesQuery request, CancellationToken cancellationToken)
        {
            var count = await _dbContext.Set <ClientMessage>().CountAsync(cancellationToken);

            var messages = await _dbContext.Set <ClientMessage>().Skip((int)request.Offset).Take((int)request.Count).ToListAsync(cancellationToken);

            return(new MessagePage(messages.Select(m => new Message(m.Content, m.IpAddress, m.CreatedAt)), request.Offset, (ulong)count));
        }
Пример #2
0
        public async Task SaveMessages(MessageList messageList, CancellationToken cancellationToken)
        {
            var messageIds = messageList.Messages.Select(m => m.MessageId).ToList();

            var existingMessages = await _dbContext.Set <ClientMessage>()
                                   .Where(cm => cm.ClientId == messageList.ClientId)
                                   .Where(cm => messageIds.Contains(cm.MessageId))
                                   .ToListAsync(cancellationToken);

            var messageToAdd = messageList.Messages.Where(m => !existingMessages.Select(em => em.MessageId).ToList().Contains(m.MessageId));

            // CLient id should be moved to separate table.
            await _dbContext.Set <ClientMessage>().AddRangeAsync(messageToAdd.Select(
                                                                     m => new ClientMessage
            {
                ClientId   = messageList.ClientId, Content = m.Content, CreatedAt = m.CreatedAt, IpAddress = m.IpAddress, MessageId = m.MessageId,
                ReceivedAt = DateTimeOffset.Now
            }), cancellationToken);

            await _dbContext.SaveChangesAsync(cancellationToken);
        }