コード例 #1
0
        public MessagesController
        (
            IMessageLinkBuilder linkBuilder,
            ActionExecutor actionExecutor,
            ListMessagesQuery listMessagesQuery,
            GetMessageQuery getMessageQuery,
            CreateMessageCommand createMessageCommand,
            UpdateMessageCommand updateMessageCommand,
            DeleteMessageCommand deleteMessageCommand
        )
        {
            _linkBuilder = linkBuilder
                           ?? throw new ArgumentNullException(nameof(linkBuilder));

            _actionExecutor = actionExecutor
                              ?? throw new ArgumentNullException(nameof(actionExecutor));

            _listMessagesQuery = listMessagesQuery
                                 ?? throw new ArgumentNullException(nameof(listMessagesQuery));

            _getMessageQuery = getMessageQuery
                               ?? throw new ArgumentNullException(nameof(getMessageQuery));

            _deleteMessageCommand = deleteMessageCommand
                                    ?? throw new ArgumentNullException(nameof(deleteMessageCommand));

            _createMessageCommand = createMessageCommand
                                    ?? throw new ArgumentNullException(nameof(createMessageCommand));

            _updateMessageCommand = updateMessageCommand
                                    ?? throw new ArgumentNullException(nameof(updateMessageCommand));
        }
コード例 #2
0
        public CreateMessageCommand MapSingle(ITweet tweet)
        {
            var user = new UserModel
            {
                NetworkId   = tweet.CreatedBy.IdStr,
                Url         = tweet.Url,
                UserName    = tweet.CreatedBy.Name,
                AvatarUrl50 = tweet.CreatedBy.ProfileImageUrl,
                MediaType   = SocialMediaType.Twitter
            };

            var tags = tweet.Hashtags.Select(x => new HashtagModel
            {
                HashTag   = new HashTagWord(x.Text),
                IsEnabled = false
            }).ToList();

            var message = new CreateMessageCommand
            {
                MessageText = tweet.Text,
                HashTags    = tags,
                MediaType   = SocialMediaType.Twitter,
                PostDate    = tweet.TweetLocalCreationDate.ToUniversalTime(),
                NetworkId   = tweet.IdStr,
                User        = user
            };

            return(message);
        }
コード例 #3
0
        public async Task AddMessageAsync(CreateMessageCommand command)
        {
            var message = new Message(command.Name, command.Email, command.Text);
            await _context.Messages.AddAsync(message);

            await _context.SaveChangesAsync();
        }
コード例 #4
0
        public List <CreateMessageCommand> MapBunch(VkNewsFeed feed)
        {
            var results = new List <CreateMessageCommand>();

            // vk doesn't return list of all hashtags in message
            // todo: consider parsing message for hashtags. But it might be too memory consuming operation.

            foreach (var post in feed.Feed)
            {
                var date = DateTimeOffset.FromUnixTimeSeconds(post.UnixTimeStamp).UtcDateTime;
                var user = FillUser(post, feed);

                var message = new CreateMessageCommand
                {
                    MessageText = post.Text,
                    HashTags    = ParseHashtags(post.Text).Select(x => new HashtagModel
                    {
                        HashTag   = new HashTagWord(x),
                        IsEnabled = false
                    }).ToList(),
                    MediaType = SocialMediaType.VK,
                    PostDate  = date,
                    NetworkId = post.Id.ToString(),
                    User      = user
                };
                results.Add(message);
            }
            return(results);
        }
コード例 #5
0
        //[Authorize(Roles = "client, freelancer")]
        public async Task <IActionResult> PostMessage(int id, [FromBody] CreateMessageInputModel inputModel)
        {
            var command = new CreateMessageCommand(id, inputModel.Content);

            await _mediator.Send(command);

            return(NoContent());
        }
コード例 #6
0
        public async Task <IActionResult> CreateMessage(int uId, int gId, CreateMessageCommand createMessageCommand)
        {
            createMessageCommand.Finalize(uId, gId);

            var messageId = await _mediator.Send(createMessageCommand);

            return(CreatedAtAction(nameof(CreateMessage), messageId));
        }
コード例 #7
0
        public async Task Users_Should_SendMessages()
        {
            var command = new UserRegisterCommand
            {
                Id       = Guid.NewGuid(),
                Email    = "*****@*****.**",
                Password = "******",
                Name     = "Mirrabel",
                Surname  = "Ernest"
            };

            var command2 = new UserRegisterCommand
            {
                Id       = new Guid("6759d0df-9838-4641-b332-f251b05fcd44"),
                Email    = "*****@*****.**",
                Password = "******",
                Name     = "Mirrabel",
                Surname  = "Ernest"
            };

            // await _backendFixture.SendAsync<UserDto>(HttpMethod.Post, "api/users", command2);

            await _backendFixture.LoginAsync(command.Email, command.Password);

            var connection1 = _backendFixture.CreateHubConnection();
            var message     = new CreateMessageCommand
            {
                Id       = Guid.NewGuid(),
                Content  = "Mario bross",
                Receiver = new Guid("6759d0df-9838-4641-b332-f251b05fcd44")
            };

            await _backendFixture.LoginAsync(command2.Email, command2.Password);

            var connection2 = _backendFixture.CreateHubConnection();

            await connection2.StartAsync();

            var tcs = new TaskCompletionSource <CreateMessageCommand>();

            connection2.On(Channels.Chat.Messages, new[] { typeof(CreateMessageCommand) }, async(p1, p2) =>
            {
                tcs.SetResult(p1[0] as CreateMessageCommand);
            },
                           new object());

            await connection1.StartAsync();

            await connection1.SendCoreAsync(Channels.Chat.Messages, new[] { message });

            await tcs.Task;

            tcs.Task.Result.Id.Should().Be(message.Id);
            tcs.Task.Result.Content.Should().Be(message.Content);
            tcs.Task.Result.Receiver.Should().Be(message.Receiver);
        }
コード例 #8
0
 public static void CommandValidation(CreateMessageCommand command)
 {
     if (command.Name == null || command.Email == null || command.Text == null)
     {
         throw new InternalSystemException("Fields can't be empty!");
     }
     else if (!nameRegex.IsMatch(command.Name) || !emailRegex.IsMatch(command.Email) || !textRegex.IsMatch(command.Text))
     {
         throw new InternalSystemException("Please provide correct data!");
     }
 }
コード例 #9
0
        public Task <HttpResponseMessage> Post([FromBody] dynamic body)
        {
            var commandMessage = new CreateMessageCommand(
                bodyMessage: (string)body.bodyMessage,
                destination: (string)body.destination,
                date: DateTime.Now,
                idUser: (string)body.idUser
                );

            var message = _serviceMessage.Create(commandMessage);

            return(CreateResponse(HttpStatusCode.Created, message));
        }
コード例 #10
0
        public async Task Should_fail_with_status_bad_request_when_client_id_is_null_or_empty(string clientId)
        {
            // Arrange
            var command = new CreateMessageCommand("The message", clientId);
            var handler = new CreateMessageCommandHandler(_mockedRepository.Object);

            // Act
            var result = await handler.Handle(command, default);

            // Assert
            Assert.True(result.Failed);
            Assert.IsType <BadRequest>(result.StatusCode);
        }
コード例 #11
0
        public ValidationResult Handler(CreateMessageCommand command)
        {
            Message message = new Message(command.Sentence, command.TypeId, command.Title);

            Type type = _typeRepository.GetById(command.TypeId);

            RuleFor(m => m.Type).NotNull().WithMessage("The Type is empty or nullable");

            //1-I need implement a validation to repository
            Boolean result = _messageRepository.Create(message);

            return(Validate(message));
        }
コード例 #12
0
        public Message Create(CreateMessageCommand command)
        {
            var message = new Message(command.BodyMessage, command.Destination, command.Date, command.IdUser, false);

            message.Validate();
            _repository.Create(message);

            if (Commit())
            {
                return(message);
            }

            return(null);
        }
コード例 #13
0
        public void Executing_it_should_create_unit_of_work_with_factory()
        {
            var factoryMock = MockRepository.GenerateMock<IUnitOfWorkFactory>();
            var contextMock = MockRepository.GenerateMock<IUnitOfWorkContext>();

            factoryMock.Expect(t => t.CreateUnitOfWork()).Repeat.Once().Return(contextMock);

            Func<CreateMessageCommand, Message> creation = (c) => new Message(c.Text);
            var executor = new CreatingCommandExecutor<CreateMessageCommand, Message>(creation, factoryMock);

            var cmd = new CreateMessageCommand();
            executor.Execute(cmd);

            factoryMock.VerifyAllExpectations();
        }
コード例 #14
0
        public async Task <ActionResult <bool> > SaveMessage([FromBody] Message message)
        {
            var createMessageCommand = new CreateMessageCommand()
            {
                Message = message,
            };
            var result = await _mediator.Send(createMessageCommand);

            if (result.Type == CommandResultTypeEnum.InvalidInput)
            {
                return(new BadRequestResult());
            }

            return(new OkObjectResult(result.Result));
        }
コード例 #15
0
        public void Executing_it_should_create_unit_of_work_with_factory()
        {
            var factoryMock = MockRepository.GenerateMock <IUnitOfWorkFactory>();
            var contextMock = MockRepository.GenerateMock <IUnitOfWorkContext>();

            factoryMock.Expect(t => t.CreateUnitOfWork()).Repeat.Once().Return(contextMock);

            Func <CreateMessageCommand, Message> creation = (c) => new Message(c.Text);
            var executor = new CreatingCommandExecutor <CreateMessageCommand, Message>(creation, factoryMock);

            var cmd = new CreateMessageCommand();

            executor.Execute(cmd);

            factoryMock.VerifyAllExpectations();
        }
コード例 #16
0
ファイル: ChatHub.cs プロジェクト: Rogaliusz/Swizzer
        public async Task SendMessageAsync(CreateMessageCommand command)
        {
            await DispatchAsync(command);

            command.CreatedAt = DateTime.UtcNow;

            if (_connections.ContainsKey(command.Receiver))
            {
                await Clients.Client(_connections[command.Receiver]).SendAsync(Channels.Chat.Messages, command);
            }

            if (_connections.ContainsKey(command.RequestBy))
            {
                await Clients.Client(_connections[command.RequestBy]).SendAsync(Channels.Chat.Messages, command);
            }
        }
コード例 #17
0
        public ActionResult Contact(CreateMessageCommand command)
        {
            if (!ModelState.IsValid)
            {
                return(View("Contact"));
            }

            if (CaptchaIsValid())
            {
                var result = _commandBus.Send(command);
                return(JsonMessage(result));
            }

            ViewBag.ErrMessage = NotificationViewMessage.InvalidaCaptcha;
            return(View("Contact"));
        }
コード例 #18
0
        private async Task OnMessageCreated(DiscordClient client, MessageCreateEventArgs eventArgs)
        {
            try
            {
                var message = eventArgs.Message;
                var guild   = eventArgs.Guild;

                if (MessageIsCommand(message.Content))
                {
                    return;
                }

                if (!IsReleventMessage(message))
                {
                    return;
                }

                if (IsPrivateMessageChannel(message.Channel))
                {
                    await message.Channel.SendMessageAsync("https://cdn.discordapp.com/emojis/740563346599968900.png?v=1");

                    return;
                }

                var todoMessage = new MessageCommandPayload(message, guild);

                var command = new CreateMessageCommand(todoMessage);

                _emoteCommandQueue.Enqueue(command);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, nameof(OnMessageCreated));

                var eventContextError = new EventErrorContext()
                {
                    EventName = nameof(OnMessageCreated),
                    User      = eventArgs.Author,
                    Channel   = eventArgs.Channel,
                    Guild     = eventArgs.Guild,
                    Message   = eventArgs.Message
                };

                await _discordErrorLogger.LogDiscordError(eventContextError, ex.ToString());
            }
        }
コード例 #19
0
        public async Task <IActionResult> CreateMessage(int userId, CreateMessageCommand request)
        {
            if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            request.SenderId = userId;

            var message = await Mediator.Send(request);

            if (message != null)
            {
                return(CreatedAtRoute("GetMessage", new { userId = userId, messageId = message.Id }, message));
            }

            return(BadRequest());
        }
        public MessageEntity MapSingle(CreateMessageCommand message)
        {
            var userCommandMapper = new UserToEntityMapper();
            var hashMapper        = new HashTagCommandToEntityMapper();
            {
                var entity = new MessageEntity
                {
                    MessageText = message.MessageText,
                    HashTags    = hashMapper.MapBunch(message.HashTags),
                    MediaType   = message.MediaType,
                    User        = userCommandMapper.MapSingle(message.User),
                    PostDate    = message.PostDate,
                    Id          = message.Id,
                    NetworkId   = message.NetworkId
                };

                return(entity);
            }
        }
コード例 #21
0
        public async Task Should_succeed_with_status_created_when_create_is_valid()
        {
            // Arrange
            _mockedRepository.Setup(x => x.UnitOfWork).Returns(_mockedUnitOfWork.Object);
            _mockedUnitOfWork.Setup(x => x.SaveChangesAsync(It.IsAny <CancellationToken>())).ReturnsAsync(1);

            var command = new CreateMessageCommand("New message", Guid.NewGuid().ToString());
            var handler = new CreateMessageCommandHandler(_mockedRepository.Object);

            // Act
            var result = await handler.Handle(command, default);

            // Assert
            Assert.True(result.Succeeded);
            Assert.IsType <Created>(result.StatusCode);
            Assert.Equal(command.Message, result.Value.Message);
            Assert.Equal(command.ClientId, result.Value.ClientId);

            _mockedRepository.Verify(x => x.Add(It.IsAny <BoardMessage>()), Times.Once);
            _mockedUnitOfWork.Verify(x => x.SaveChangesAsync(default), Times.Once);
        public async Task <CommandResult> Handle(CreateMessageCommand command)
        {
            var mapper  = new MessageCommandToEntityMapper();
            var message = mapper.MapSingle(command);

            if (!context.Messages.Any(z => z.NetworkId == message.NetworkId &&
                                      z.User.NetworkId == message.User.NetworkId))
            {
                if (!context.Users.Any(x => x.NetworkId == message.User.NetworkId))
                {
                    context.Users.Add(message.User);
                    await context.SaveChangesAsync();
                }

                message.User = await context.Users.FirstOrDefaultAsync(x => x.NetworkId == message.User.NetworkId);

                message.PostDate = message.PostDate?.ToUniversalTime();
                context.Messages.Add(message);

                foreach (var tag in message.HashTags)
                {
                    var tagToLink = await context.Hashtags.FirstOrDefaultAsync(x => x.HashTag == tag.HashTag);

                    if (tagToLink != null)
                    {
                        var tag2Message = new MessageHashTagRelationsEntity
                        {
                            HashTagEntity = tagToLink,
                            MessageEntity = message
                        };
                        context.TaggedMessages.Add(tag2Message);
                    }
                }
                await context.SaveChangesAsync();
            }
            return(new CommandResult {
                Success = true
            });
        }
コード例 #23
0
        public async Task <IActionResult> Contact(CreateMessageCommand command)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.ShowMessage = true;
                ViewBag.Message     = "Something went wrong";
                return(View());
            }

            if (string.IsNullOrEmpty(command.Answer) || command.Answer.ToLowerInvariant() != "martha")
            {
                ViewBag.ShowMessage = true;
                ViewBag.Message     = "Answer isn't correct. Try again!";
                return(View());
            }

            try
            {
                CreateMessageValidator.CommandValidation(command);

                await _messageService.AddMessageAsync(command);

                ViewBag.Added = true;
                return(View());
            }
            catch (InternalSystemException ex)
            {
                ViewBag.ShowMessage = true;
                ViewBag.Message     = ex.Message;
                return(View());
            }
            catch (Exception)
            {
                ViewBag.ShowMessage = true;
                ViewBag.Message     = "Something went wrong!";
                return(View());
            }
        }
コード例 #24
0
        public async void Handle_ShouldCallInsertAttachment_WhenRequestHasAttachments()
        {
            // ARRANGE
            var validator                = new CreateMessageCommandValidator();
            var messageRepositoryMock    = new Mock <IMessageRepository>();
            var attachmentRepositoryMock = new Mock <IAttachmentRepository>();
            var loggerMock               = new Mock <ILogger>();

            var handler = new CreateMessageCommandHandler(
                messageRepositoryMock.Object,
                attachmentRepositoryMock.Object,
                loggerMock.Object,
                validator
                );
            var command = new CreateMessageCommand()
            {
                Message = new Domain.Models.Messages.Message()
                {
                    MessageId   = "1",
                    Attachments = new List <Attachment>()
                    {
                        new Attachment(),
                        new Attachment(),
                    }
                }
            };

            messageRepositoryMock.Setup(x => x.InsertMessage(It.IsAny <Domain.Models.Messages.Message>())).ReturnsAsync(1);

            // ACT
            var response = await handler.Handle(command, new CancellationToken());

            // ASSERT
            Assert.Equal(CommandResultTypeEnum.Success, response.Type);
            messageRepositoryMock.Verify(x => x.InsertMessage(It.IsAny <Domain.Models.Messages.Message>()), Times.Once);
            attachmentRepositoryMock.Verify(x => x.InsertAttachment(It.IsAny <Attachment>(), command.Message.MessageId), Times.Exactly(2));
        }
コード例 #25
0
        public void Executing_it_should_invoke_action()
        {
            var invoked = false;

            var factoryMock = MockRepository.GenerateMock <IUnitOfWorkFactory>();
            var contextMock = MockRepository.GenerateMock <IUnitOfWorkContext>();

            factoryMock.Stub(t => t.CreateUnitOfWork()).Return(contextMock);
            contextMock.Expect(t => t.Accept()).Repeat.Once();

            Func <CreateMessageCommand, Message> creation = (c) =>
            {
                invoked = true;
                return(new Message(c.Text));
            };

            var executor = new CreatingCommandExecutor <CreateMessageCommand, Message>(creation, factoryMock);

            var cmd = new CreateMessageCommand();

            executor.Execute(cmd);

            invoked.Should().BeTrue();
        }
コード例 #26
0
 public MessageModel Put([FromRoute] int id, [FromBody] CreateMessageCommand cmd)
 {
     _messageService.messages[id] = cmd.message;
     return(new MessageModel(id, _messageService.messages[id]));
 }
コード例 #27
0
        public void Executing_it_should_invoke_action()
        {
            var invoked = false;

            var factoryMock = MockRepository.GenerateMock<IUnitOfWorkFactory>();
            var contextMock = MockRepository.GenerateMock<IUnitOfWorkContext>();

            factoryMock.Stub(t => t.CreateUnitOfWork()).Return(contextMock);
            contextMock.Expect(t => t.Accept()).Repeat.Once();

            Func<CreateMessageCommand, Message> creation = (c) =>
            {
                invoked = true;
                return new Message(c.Text);
            };

            var executor = new CreatingCommandExecutor<CreateMessageCommand, Message>(creation, factoryMock);

            var cmd = new CreateMessageCommand();
            executor.Execute(cmd);

            invoked.Should().BeTrue();
        }
コード例 #28
0
 public IActionResult Post([FromBody] CreateMessageCommand cmd)
 {
     _messageService.AddMessage(cmd.message);
     return(NoContent());
 }
コード例 #29
0
        public async Task <ActionResult <int> > Create([FromBody] CreateMessageCommand command)
        {
            var messageId = await Mediator.Send(command);

            return(Ok(messageId));
        }
コード例 #30
0
        public async Task <ActionResult <MessageViewModel> > CreateMessage(CreateMessageCommand command)
        {
            var result = await Mediator.Send(command);

            return(Ok(result));
        }
コード例 #31
0
        public void SendMessage(string message, string connectionId)
        {
            var command = new CreateMessageCommand(RealTimeChatUsersService.Users[connectionId], message);

            this.mediator.Send(command);
        }
コード例 #32
0
 public async Task <ActionResult> Create(int receiverId,
                                         CreateMessageCommand command)
 => await this.Send(command.SetId(receiverId));