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); }
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)); }
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()); }