Esempio n. 1
0
        public async Task <IEnumerable <ChatMessageResource> > Handle(GetMessagesWithRecipientQuery request, CancellationToken cancellationToken = default)
        {
            int currentUserId = _userProvider.GetCurrentUserId();

            MessageBoundaries boundaries = _mapper.Map <GetMessagesWithRecipientQuery, MessageBoundaries>(request);

            List <MessageRecipient> messagesWithRecipients = await _unitOfWork.MessageRecipients
                                                             .GetMessagesWithRecipient(currentUserId, request.RecipientId, boundaries);

            IEnumerable <ChatMessageResource> messages = messagesWithRecipients
                                                         .Select(source => new ChatMessageResource
            {
                MessageRecipientId = source.MessageRecipientId,
                MessageId          = source.MessageId,
                AuthorName         = source.Message.Author.UserName,
                HtmlContent        = source.Message.HtmlContent,
                Created            = source.Message.Created,
                IsOwnMessage       = source.Message.AuthorId == currentUserId,
                IsRead             = source.Message.MessageRecipients.All(mr => mr.IsRead),
            });

            return(messages);
        }
Esempio n. 2
0
        public async Task <ActionResult <IEnumerable <ChatMessageResource> > > GetMessagesWithRecipient([FromRoute] int recipientId, [FromQuery] GetMessagesWithRecipientQueryParams boundaries, CancellationToken cancellationToken = default)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // Check if the given recipient exists
            RecipientExistsQuery existsQuery = new RecipientExistsQuery {
                RecipientId = recipientId
            };

            bool exists = await _mediator.Send(existsQuery, cancellationToken);

            if (!exists)
            {
                return(NotFound(new ErrorResource
                {
                    StatusCode = StatusCodes.Status404NotFound,
                    Message = $"Recipient with ID '{recipientId}' does not exist"
                }));
            }

            // Get messages with given recipient
            GetMessagesWithRecipientQuery fetchQuery = new GetMessagesWithRecipientQuery
            {
                RecipientId = recipientId,
                Limit       = boundaries.Limit,
                Before      = boundaries.Before,
                After       = boundaries.After,
            };

            IEnumerable <ChatMessageResource> messages = await _mediator.Send(fetchQuery, cancellationToken);

            return(Ok(messages));
        }
Esempio n. 3
0
        public async Task GetMessagesWithRecipientQueryHandler_ShouldReturnMessages()
        {
            // Arrange
            GetMessagesWithRecipientQuery request = new GetMessagesWithRecipientQuery {
                RecipientId = 1, Limit = 50, Before = null, After = null
            };

            IEnumerable <MessageRecipient> expectedMessageRecipients = new[]
            {
                new MessageRecipient
                {
                    MessageRecipientId = 1,
                    MessageId          = 1,
                    Message            = new Message
                    {
                        MessageId   = 1,
                        AuthorId    = 1,
                        HtmlContent = "messageContent1",
                        Created     = new DateTime(2020, 2, 8, 15, 0, 0),
                        Author      = new User
                        {
                            UserId   = 1,
                            UserName = "******"
                        },
                        MessageRecipients = new List <MessageRecipient>
                        {
                            new MessageRecipient {
                                IsRead = true
                            },
                        }
                    }
                },
                new MessageRecipient
                {
                    MessageRecipientId = 2,
                    MessageId          = 2,
                    Message            = new Message
                    {
                        MessageId   = 2,
                        AuthorId    = 2,
                        HtmlContent = "messageContent2",
                        Created     = new DateTime(2020, 2, 8, 15, 3, 0),
                        Author      = new User
                        {
                            UserId   = 2,
                            UserName = "******"
                        },
                        MessageRecipients = new List <MessageRecipient>
                        {
                            new MessageRecipient {
                                IsRead = true
                            },
                        }
                    }
                },
            };

            IQueryable <MessageRecipient> queryableMock = expectedMessageRecipients
                                                          .AsQueryable()
                                                          .BuildMock()
                                                          .Object;

            _unitOfWorkMock
            .Setup(m => m.MessageRecipients.GetMessagesWithRecipient(1, request.RecipientId, It.IsAny <MessageBoundaries>()))
            .Returns(queryableMock);

            GetMessagesWithRecipientQuery.Handler handler = new GetMessagesWithRecipientQuery.Handler(_unitOfWorkMock.Object, _userProviderMock.Object, _mapperMock);

            // Act
            IEnumerable <ChatMessageResource> result = await handler.Handle(request);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(2, result.Count());
        }