Example #1
0
        public async Task <IActionResult> GetAsync(Guid recieverId, [FromQuery] GetMessagesQuery query)
        {
            query.Reciever = recieverId;
            var results = await DispatchQueryAsync <GetMessagesQuery, PaginationDto <MessageDto> >(query);

            return(Ok(results));
        }
Example #2
0
        public async Task GetStatisticsPerPeriod(DiscordRequest request, Contexts contexts)
        {
            var period = _reportsService.SelectPeriod(request.Arguments.FirstOrDefault()?.Value);

            if (implementedBySplitter.Contains(period))
            {
                var query  = new GetMessagesStatisticsQuery(period);
                var result = await this._queryBus.ExecuteAsync(query);

                var periodStats = result.PeriodStatistics.Where(x => x.Count > 0); // todo
                return;
            }

            var getMessages = new GetMessagesQuery(contexts.Server.Id);
            var messages    = this._queryBus.Execute(getMessages).Messages.ToList();
            var report      = _reportsService.CreateReport(messages, period);

            Log.Information("Generated statistics for time range {start} {end}", report.TimeRange.Start, report.TimeRange.End);
#if DEBUG
            PrintDebugStats(report);
#endif
            var path            = _chartsService.GetImageStatisticsPerPeriod(report);
            var messagesService = _messagesServiceFactory.Create(contexts);
            await messagesService.SendFile(path);
        }
        public async Task GetStatisticsPerPeriod(StatsCommand statsCommand, Contexts contexts)
        {
            var period = this._reportsService.SelectPeriod(statsCommand);

            if (this.implementedBySplitter.Contains(period))
            {
                var query  = new GetMessagesStatisticsQuery(period);
                var result = await this._queryBus.ExecuteAsync(query);

                var periodStats = result.PeriodStatistics.Where(x => x.Count > 0);
                return;
            }

            var getMessages = new GetMessagesQuery(contexts.Server.Id);
            var messages    = this._queryBus.Execute(getMessages).Messages.ToList();
            var report      = this._reportsService.CreateReport(messages, period);

            Log.Information("Generated statistics for time range {start} {end}", report.TimeRange.Start, report.TimeRange.End);
#if DEBUG
            PrintDebugStats(report);
#endif
            var stream = await this._chartsService.GetImageStatisticsPerPeriod(report);

            var messagesService = this._messagesServiceFactory.Create(contexts);
            await messagesService.SendFile("Statistics.png", stream);
        }
Example #4
0
        private async Task UpdateMessages()
        {
            var getAllMessagesQuery = new GetMessagesQuery(GetMessagesQuery.GET_ALL_SERVERS);
            var messages            = this._queryBus.Execute(getAllMessagesQuery).Messages;

            await this.UpdateSafetyUsersStates(messages);
        }
Example #5
0
 public IActionResult GetMessages(GetMessagesQuery query)
 {
     return(Ok(new GetMessagesResult {
         Messages = new List <MessageRemoteDto>(),
         UserCount = 10
     }));
 }
        public ChatViewModel(INavigationService navigationService,
                             IRepository <Message> messageRepository,
                             ChatbotViewModel chatbotViewModel,
                             ICommandFactory commandFactory,
                             IDialogService dialogService,
                             IQueryFactory queryFactory,
                             ChatBoxViewModel message)
            : base(navigationService)
        {
            Guard.Against.Null(navigationService, nameof(navigationService));
            Guard.Against.Null(messageRepository, nameof(messageRepository));
            Guard.Against.Null(chatbotViewModel, nameof(chatbotViewModel));
            Guard.Against.Null(commandFactory, nameof(commandFactory));
            Guard.Against.Null(dialogService, nameof(dialogService));
            Guard.Against.Null(queryFactory, nameof(queryFactory));
            Guard.Against.Null(message, nameof(message));

            ChatbotViewModel = chatbotViewModel;
            _dialogService   = dialogService;
            Messages         = messageRepository;
            ChatBoxViewModel = message;

            Title       = "Chat Page";
            SendMessage = commandFactory
                          .MakeDelegateWithParameter <SendMessageCommand, IChatBoxModel>();

            GotoOptions       = new DelegateCommand(GotoOptionsCommand);
            _getMessagesQuery = queryFactory.MakeQuery <GetMessagesQuery>();
        }
        private IReadOnlyList <Message> GetMessages(ulong serverId)
        {
            var query    = new GetMessagesQuery(serverId);
            var messages = this.queryBus.Execute(query).Messages.ToList();

            return(messages);
        }
Example #8
0
        public async Task GenerateStatsForDaysBefore(DiscordServerContext server, DateTime?lastInitDate)
        {
            var dayStatisticsQuery      = new GetServerDayStatisticsQuery(server.Id);
            var allServerDaysStatistics = (await this._queryBus.ExecuteAsync(dayStatisticsQuery)).ServerDayStatistics.ToList();
            var startDate     = lastInitDate ?? DateTime.UnixEpoch;
            var messagesQuery = new GetMessagesQuery(server.Id)
            {
                SentDate = new TimeRange(startDate, DateTime.Today) // it will exclude today - it should generate today's stats tomorrow
            };
            var messages = this._queryBus.Execute(messagesQuery).Messages;

            var messagesNotCachedForStats = messages
                                            .Where(message => allServerDaysStatistics.All(s => message.SentAt.Date != s.Date));

            var serverStatistics = messagesNotCachedForStats
                                   .GroupBy(x => x.SentAt.Date)
                                   .Select(x => new ServerDayStatistic(x.ToList(), server.Id, x.Key));

            var commands = serverStatistics.Select(x => new AddServerDayStatisticCommand(x));

            foreach (var command in commands)
            {
                await this._commandBus.ExecuteAsync(command);
            }
        }
        private void ReloadCache()
        {
            var getAllMessagesQuery   = new GetMessagesQuery(GetMessagesQuery.GET_ALL_SERVERS);
            var messages              = this._queryBus.Execute(getAllMessagesQuery).Messages;
            var groupedServerMessages = this.GroupMessagesByServers(messages);

            this.UpdateServerMessagesCounts(groupedServerMessages);
            this._lastUpdated = DateTime.UtcNow;
        }
Example #10
0
        public async Task <IEnumerable <MessageDto> > GetMessages([FromBody] GetMessagesRequest request)
        {
            var query          = new GetMessagesQuery(request.GetGuildId, request.GetChannelId, request.GetUserId ?? 0);
            var responseResult = await this._queryBus.ExecuteAsync(query);

            var messagesDto = responseResult.Messages.Take(LIMIT_FOR_QUERY).Select(x => new MessageDto(x));

            return(messagesDto);
        }
        public void GuardsAgainstNullUnitOfWork()
        {
            Action action = () =>
                            _ = new GetMessagesQuery(_chatbotService.Object, null);

            action.Should()
            .Throw <ArgumentNullException>()
            .WithMessage("Value cannot be null. (Parameter 'unitOfWork')");
        }
Example #12
0
        private void ReloadCache()
        {
            var getAllMessagesQuery   = new GetMessagesQuery(0);
            var messages              = _queryBus.Execute(getAllMessagesQuery).Messages;
            var groupedServerMessages = GroupMessagesByServers(messages);

            UpdateServerMessagesCounts(groupedServerMessages);
            _lastUpdated = DateTime.UtcNow;
        }
Example #13
0
        public Task <IList <ChatMessageModel> > GetAllMessagesAsync(string chatId)
        {
            var query = new GetMessagesQuery
            {
                ChannelId = chatId,
            };
            var request = new GetMessagesRequest(_chatConfig.ApiUrl, query);

            return(LoadMessagesAsync(request));
        }
        public async Task GetMessages_WhenCalled_FilterOutInvalidItems()
        {
            // Arrange
            var airTableService     = Substitute.For <IAirTableService>();
            var mapperConfiguration = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile <MessageMapper>();
            });

            IMapper mapper = mapperConfiguration.CreateMapper();

            var command = new GetMessagesQuery();
            var handler = new GetMessagesQuery.GetMessagesQueryHandler(airTableService, mapper);

            var response = new AirTableGetResponseDTO()
            {
                records = new List <RecordsDTO>()
                {
                    new RecordsDTO()
                    {
                        id = "recCR2LP7wZVioc5H", fields = new FieldsDTO()
                        {
                            id = null, Message = "Message", receivedAt = DateTime.Now.ToString()
                        }
                    },
                    new RecordsDTO()
                    {
                        id = "recCR2LP7wZVioc5H", fields = new FieldsDTO()
                        {
                            id = "2", Message = "Message", receivedAt = DateTime.Now.ToString()
                        }
                    },
                    new RecordsDTO()
                    {
                        id = "recCR2LP7wZVioc5H", fields = new FieldsDTO()
                        {
                            id = "3", Message = "Message", receivedAt = DateTime.Now.ToString()
                        }
                    }
                }
            };

            airTableService.GetMessagesAsync().Returns(response);

            // Act
            var result = handler.Handle(command, new System.Threading.CancellationToken());

            // Assert
            await airTableService.Received(Quantity.AtLeastOne()).GetMessagesAsync();

            result.Should().NotBeNull();
            result.Result.Should().HaveCount(2);
        }
Example #15
0
        public void Inizialize()
        {
            var chatbotService = new Mock <IChatbotService>();
            var unitOfWork     = new Mock <IUnitOfWork>();
            var quey           = new GetMessagesQuery(chatbotService.Object, unitOfWork.Object);

            var container = new Mock <IContainer>();

            container.Setup(m => m.Resolve(typeof(GetMessagesQuery), It.IsAny <IfUnresolved>()))
            .Returns(() => quey);

            _sut = new QueryFactory(container.Object);
        }
Example #16
0
        public Task <IList <ChatMessageModel> > GetMessagesFromAsync(MessagesQuery query)
        {
            var messagesQuery = new GetMessagesQuery
            {
                ChannelId    = query.ChannelId,
                FromId       = query.FromId,
                FromDateTime = query.FromDateTime,
                Count        = query.Count
            };
            var request = new GetMessagesRequest(_chatConfig.ApiUrl, messagesQuery);

            return(LoadMessagesAsync(request));
        }
Example #17
0
        public async Task <PaginationDto <MessageDto> > HandleAsync(GetMessagesQuery query)
        {
            var ids      = (new[] { query.RequestBy, query.Reciever }).OrderBy(x => x).ToList();
            var querable = _context.Messages.Where(x => ids.Any(s => s == x.ReceiverId) && ids.Any(s => s == x.SenderId));
            var count    = await querable.Where(query).CountAsync();

            var data = await querable.FilterBy(query).ToListAsync();

            var wrapper = new PaginationDto <Message> {
                Data = data, TotalCount = count
            };

            return(_swizzerMapper.MapTo <PaginationDto <MessageDto> >(wrapper));
        }
Example #18
0
        public List <MessageDto> GetMessages(Int32 startId, string connectionId)
        {
            var currentUserNick = string.Empty;

            RealTimeChatUsersService.Users.TryGetValue(connectionId, out currentUserNick);

            var query = new GetMessagesQuery(startId);

            var messages = this.mediator.Send(query).Result;

            var messagesDto = messages.Select((m) => new MessageDto(m.Id, m.Nick, m.Content, currentUserNick == m.Nick));

            return(messagesDto.ToList());
        }
Example #19
0
 public ChatClient(
     GetPeopleQuery getPeopleQuery,
     GetMessagesQuery getMessagesQuery,
     SendMessageMutation sendMessageMutation,
     ReadMessagesSubscription readMessagesSubscription)
 {
     _getPeopleQuery = getPeopleQuery
                       ?? throw new global::System.ArgumentNullException(nameof(getPeopleQuery));
     _getMessagesQuery = getMessagesQuery
                         ?? throw new global::System.ArgumentNullException(nameof(getMessagesQuery));
     _sendMessageMutation = sendMessageMutation
                            ?? throw new global::System.ArgumentNullException(nameof(sendMessageMutation));
     _readMessagesSubscription = readMessagesSubscription
                                 ?? throw new global::System.ArgumentNullException(nameof(readMessagesSubscription));
 }
        public async Task ReadUserMessages(MessagesCommand command, Contexts contexts)
        {
            if (!contexts.User.IsAdmin() && command.User != contexts.User.Id) //allow check own messages for everybody
            {
                throw new NotAdminPermissionsException();
            }
            var selectedUser = await this._usersService.GetUserByIdAsync(contexts.Server, command.User);

            if (selectedUser == null)
            {
                throw new UserNotFoundException(command.User.GetUserMention());
            }
            var timeRange = TimeRange.ToNow(contexts.Message.SentAt - command.Time);
            var query     = new GetMessagesQuery(contexts.Server.Id, userId: selectedUser.Id)
            {
                SentDate = timeRange
            };
            var messages = this._queryBus.Execute(query).Messages
                           .OrderBy(x => x.SentAt)
                           .ToList();

            var messagesService     = this._messagesServiceFactory.Create(contexts);
            var maxNumberOfMessages = this._configurationService.GetConfigurationItem <MaxNumberOfMessagesDisplayedByMessageCommandWithoutForce>(contexts.Server.Id).Value;

            if (messages.Count > maxNumberOfMessages && !command.Force)
            {
                await messagesService.SendResponse(x => x.NumberOfMessagesIsHuge(messages.Count));

                return;
            }

            if (!messages.Any())
            {
                await messagesService.SendResponse(x => x.UserDidntWriteAnyMessageInThisTime(selectedUser));

                return;
            }

            var header       = $"Messages from user {selectedUser} starting at {timeRange.Start.ToLocalTimeString()}";
            var lines        = messages.Select(x => $"{x.SentAt.ToLocalTimeString()} {x.Author.Name}: {x.Content.Replace("```", "")}");
            var linesBuilder = new StringBuilder().PrintManyLines(lines.ToArray(), contentStyleBox: true);

            await this._directMessagesService.TrySendMessage(contexts.User.Id, header);

            await this._directMessagesService.TrySendMessage(contexts.User.Id, linesBuilder.ToString(), MessageType.NormalText);

            await messagesService.SendResponse(x => x.SentByDmMessagesOfAskedUser(messages.Count, selectedUser));
        }
Example #21
0
        public async Task ReadUserMessages(DiscordRequest request, Contexts contexts)
        {
            var mention      = request.GetMention();
            var selectedUser = await this._usersService.GetUserByMentionAsync(contexts.Server, mention);

            if (selectedUser == null)
            {
                throw new UserNotFoundException(mention);
            }

            var timeRange = request.GetPastTimeRange(defaultTime: TimeSpan.FromHours(1));
            var query     = new GetMessagesQuery(contexts.Server.Id, selectedUser.Id)
            {
                SentDate = timeRange
            };
            var messages = this._queryBus.Execute(query).Messages
                           .OrderBy(x => x.SentAt)
                           .ToList();

            var messagesService  = this._messagesServiceFactory.Create(contexts);
            var hasForceArgument = request.HasArgument("force") || request.HasArgument("f");

            if (messages.Count > 200 && !hasForceArgument)
            {
                await messagesService.SendResponse(x => x.NumberOfMessagesIsHuge(messages.Count));

                return;
            }

            if (!messages.Any())
            {
                await messagesService.SendResponse(x => x.UserDidntWriteAnyMessageInThisTime(selectedUser));

                return;
            }

            var header       = $"Messages from user {selectedUser} starting at {timeRange.Start}";
            var lines        = messages.Select(x => $"{x.SentAt:yyyy-MM-dd HH:mm:ss} {x.Author.Name}: {x.Content.Replace("```", "")}");
            var linesBuilder = new StringBuilder().PrintManyLines(lines.ToArray(), contentStyleBox: true);

            await this._directMessagesService.TrySendMessage(contexts.User.Id, header);

            await this._directMessagesService.TrySendMessage(contexts.User.Id, linesBuilder.ToString(), MessageType.BlockFormatted);

            await messagesService.SendResponse(x => x.SentByDmMessagesOfAskedUser(messages.Count, selectedUser));
        }
        public void Inizialize()
        {
            var messages = new List <Message> {
                new TextMessage()
            };

            _chatbotService = new Mock <IChatbotService>();
            _chatbotService.Setup(m => m.HasUnreadMessages()).Returns(() => true);
            _chatbotService.Setup(m => m.GetMessages()).Returns(() => messages);

            _persistance = new Mock <IPersistence <Message> >();
            _persistance.Setup(m => m.Query(null)).Returns(() => messages);

            _unitOfWork = new Mock <IUnitOfWork>();
            _unitOfWork.Setup(m => m.GetPersistence <Message>(It.IsAny <Type>())).Returns(() => _persistance.Object);

            _sut = new GetMessagesQuery(_chatbotService.Object, _unitOfWork.Object);
        }
Example #23
0
        private async Task GenerateStatsForLastDay()
        {
            var servers        = this._discordServersService.GetDiscordServersAsync();
            var yesterdayDate  = DateTime.Today.AddDays(-1);
            var todayDate      = DateTime.Today;
            var yesterdayRange = new TimeRange(yesterdayDate, todayDate);

            await foreach (var server in servers)
            {
                var query = new GetMessagesQuery(server.Id)
                {
                    SentDate = yesterdayRange
                };
                var messages = this._queryBus.Execute(query).Messages.ToList();

                var serverStatistic = new ServerDayStatistic(messages, server.Id, DateTime.Today);
                var command         = new AddServerDayStatisticCommand(serverStatistic);
                await this._commandBus.ExecuteAsync(command);
            }
        }
        public async Task <IEnumerable <MessageResult> > Handle(GetMessagesQuery request, CancellationToken cancellationToken)
        {
            SAMLAssertion assertion;

            try
            {
                assertion = SAMLAssertion.Deserialize(request.AssertionToken);
            }
            catch
            {
                throw new BadAssertionTokenException(Global.BadAssertionToken);
            }

            var messagesResult = await _ehealthBoxService.GetMessagesList(new EHealthBoxGetMessagesListRequest
            {
                StartIndex = request.StartIndex,
                EndIndex   = request.EndIndex,
                Source     = request.Source
            }, assertion);

            return(messagesResult.Body.GetMessagesListResponse.MessageLst.Select(_ => _.ToResult()));
        }
Example #25
0
        public async Task <Result <PagedResult <Message> > > Handle(GetMessagesQuery request, CancellationToken cancellationToken)
        {
            var auth = await _mediator.Send(new AuthorizeQuery { Username = request.Username, Password = request.Password });

            if (auth.IsError)
            {
                return(new Result <PagedResult <Message> > {
                    IsError = true, Message = auth.Message
                });
            }

            var messages = _store.GetMessages(request.SourceId);
            var search   = request.Search;

            if (!string.IsNullOrWhiteSpace(search))
            {
                Func <string, string> ifNull = (string a) => a == null ? "" : a;
                messages = messages.Where(u => ifNull(u.BodyPlain).ToLower().Contains(search.ToLower())).ToArray();
            }

            return(new Result <PagedResult <Message> >(messages.GetPagedResult <Message>(request.PageNumber, request.PageSize)));
        }
        public static GetMessagesQuery ToGetMessagesQuery(this JObject jObj)
        {
            var result = new GetMessagesQuery();
            var values = jObj.ToObject <Dictionary <string, object> >();

            if (values.TryGet(MedikitApiConstants.SearchNames.AssertionToken, out string assertionToken))
            {
                result.AssertionToken = assertionToken;
            }

            if (values.TryGet(MedikitApiConstants.SearchNames.StartIndex, out int startIndex))
            {
                result.StartIndex = startIndex;
            }

            if (values.TryGet(MedikitApiConstants.SearchNames.EndIndex, out int endIndex))
            {
                result.EndIndex = endIndex;
            }

            return(result);
        }
        public async Task GivenMessageRequest_WhenGet_ThenAGetReturnsSuccessIfAtLeastOneMessageExists()
        {
            var authQuery = new GetAuthenticationTokenQuery
            {
                UserName = "******",
                Password = "******"
            };

            AuthenticationToken authenticationToken;

            using (var postAuthResponse = await _client.PostAsJsonAsync($"/api/Auth", authQuery))
            {
                Assert.True(postAuthResponse.IsSuccessStatusCode);
                authenticationToken = await postAuthResponse.Content.ReadAsAsync <AuthenticationToken>();

                Assert.NotEmpty(authenticationToken.Token);
            }

            _client.DefaultRequestHeaders.Add("Authorization", $"Bearer {authenticationToken.Token}");

            var query = new GetMessagesQuery
            {
                MaxRecords = 3,
                View       = "Grid view"
            };

            List <MessagesViewModel> messages;

            using (var getMessagesResponse = await _client.GetAsync($"/api/Messages?maxRecords={query.MaxRecords}&view={query.View}"))
            {
                Assert.True(getMessagesResponse.IsSuccessStatusCode);
                messages = await getMessagesResponse.Content.ReadAsAsync <List <MessagesViewModel> >();

                Assert.True(messages.Any());
            }
        }
        /// <summary>
        /// Asynchronously run the search action. Display results when done.
        /// </summary>
        /// <param name="searchText">The text to search for.</param>
        /// <returns>A task representing the asynchronous operation.</returns>
        private async Task SearchAsync(string searchText)
        {
            this.uxResultsList.Items.Clear();

            // Save the user from themselves; prevent empty searches.
            if (String.IsNullOrEmpty(searchText))
                return;

            var query = new GetMessagesQuery() { Pattern = searchText };
            var messages = await this.database.QueryAsync(query);
            foreach (var message in messages)
            {
                var item = new ListViewItem();
                item.Tag = message;
                item.Text = message.Timestamp?.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
                item.SubItems.Add(message.AuthorDisplayName);
                item.SubItems.Add(FormatMessage(message.Text));

                this.uxResultsList.Items.Add(item);
            }

            this.uxResultsList.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        }
Example #29
0
 public GetOlderMessagesRequest(string apiUrl, GetMessagesQuery query) : base(query)
 {
     _apiUrl = apiUrl;
 }
Example #30
0
 public Task <PaginationDto <MessageDto> > HandleAsync(GetMessagesQuery query)
 {
     return(_apiHttpWebService.SendAsync <PaginationDto <MessageDto> >(HttpMethod.Get, Routes.Messages.Main + query.Reciever));
 }
Example #31
0
 public Task <IEnumerable <MessageResult> > SearchSentboxMessages(GetMessagesQuery query)
 {
     query.Source = EHealthBoxSources.SENTBOX;
     return(_mediator.Send(query));
 }