示例#1
0
        /// <inheritdoc />
        public long Handle(DeleteMessageCommand <int> command)
        {
            using (var db = _connectionInformation.GetDatabase())
            {
                db.Database.BeginTrans();
                try
                {
                    var col    = db.Database.GetCollection(_tableNameHelper.QueueName);
                    var result = col.Delete(command.QueueId);

                    //note - continue in case we have orphaned records, regardless of result.
                    var meta = db.Database.GetCollection <Schema.MetaDataTable>(_tableNameHelper.MetaDataName);
                    meta.DeleteMany(x => x.QueueId == command.QueueId);

                    var status = db.Database.GetCollection <Schema.StatusTable>(_tableNameHelper.StatusName);
                    status.DeleteMany(x => x.QueueId == command.QueueId);

                    var errorTrack = db.Database.GetCollection <Schema.ErrorTrackingTable>(_tableNameHelper.ErrorTrackingName);
                    errorTrack.DeleteMany(x => x.QueueId == command.QueueId);

                    var metaErrors = db.Database.GetCollection <Schema.MetaDataErrorsTable>(_tableNameHelper.MetaDataErrorsName);
                    metaErrors.DeleteMany(x => x.QueueId == command.QueueId);

                    db.Database.Commit();
                    return(result ? 1 : 0);
                }
                catch
                {
                    db.Database.Rollback();
                    throw;
                }
            }
        }
示例#2
0
        public async Task HandleAsync(DeleteMessageCommand command)
        {
            var msg = await _context.Message.Where(x => x.Id == command.Id).FirstOrDefaultAsync();

            _context.Message.Remove(msg);
            await _context.SaveChangesAsync();
        }
        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));
        }
示例#4
0
        public async Task Should_succeed_with_status_deleted_when_delete_is_valid()
        {
            // Arrange
            var message = MockedMessageBuilder
                          .SetId(1)
                          .SetMessage("The message")
                          .SetClientId(Guid.NewGuid().ToString())
                          .Build()
                          .Object;

            _mockedRepository.Setup(x => x.GetAsync(It.IsAny <int>())).ReturnsAsync(message);
            _mockedRepository.Setup(x => x.UnitOfWork).Returns(_mockedUnitOfWork.Object);
            _mockedUnitOfWork.Setup(x => x.SaveChangesAsync(It.IsAny <CancellationToken>())).ReturnsAsync(1);

            var command = new DeleteMessageCommand(message.Id, message.ClientId);
            var handler = new DeleteMessageCommandHandler(_mockedRepository.Object);

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

            // Assert
            Assert.True(result.Succeeded);
            Assert.IsType <Deleted>(result.StatusCode);

            _mockedRepository.Verify(x => x.GetAsync(command.MessageId), Times.Once);
            _mockedRepository.Verify(x => x.Remove(message), Times.Once);
            _mockedUnitOfWork.Verify(x => x.SaveChangesAsync(default), Times.Once);
        public void Create_Default()
        {
            const int id   = 19334;
            var       test = new DeleteMessageCommand <long>(id);

            Assert.Equal(id, test.QueueId);
        }
        public void Create_Default(string number)
        {
            var id   = new RedisQueueId(number);
            var test = new DeleteMessageCommand(id);

            Assert.Equal(id, test.Id);
        }
示例#7
0
        public void Delete(string pipeName, string messageName)
        {
            var deleteMessageCommand = new DeleteMessageCommand(
                pipeName,
                Guid.Parse(messageName));

            _commandProcessor.Send(deleteMessageCommand);

            Request.CreateResponse(HttpStatusCode.OK);
        }
示例#8
0
        public async Task Should_fail_with_status_bad_request_when_client_id_is_null_or_empty(string clientId)
        {
            // Arrange
            var command = new DeleteMessageCommand(1, clientId);
            var handler = new DeleteMessageCommandHandler(_mockedRepository.Object);

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

            // Assert
            Assert.True(result.Failed);
            Assert.IsType <BadRequest>(result.StatusCode);
        }
示例#9
0
 /// <inheritdoc />
 public void Handle(DeleteMessageCommand <long> command, IDbCommand dbCommand, CommandStringTypes commandType)
 {
     //set ID if not set
     if (!dbCommand.Parameters.Contains("@QueueID"))
     {
         var param = dbCommand.CreateParameter();
         param.ParameterName = "@QueueID";
         param.DbType        = DbType.Int64;
         param.Value         = command.QueueId;
         dbCommand.Parameters.Add(param);
     }
     dbCommand.CommandText = _commandCache.GetCommand(commandType);
 }
示例#10
0
        public async Task Should_fail_with_status_not_found_when_deleting_message_that_does_not_exist()
        {
            // Arrange
            _mockedRepository.Setup(x => x.GetAsync(It.IsAny <int>())).ReturnsAsync((BoardMessage)null);

            var command = new DeleteMessageCommand(1, Guid.NewGuid().ToString());
            var handler = new DeleteMessageCommandHandler(_mockedRepository.Object);

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

            // Assert
            Assert.True(result.Failed);
            Assert.IsType <NotFound>(result.StatusCode);

            _mockedRepository.Verify(x => x.GetAsync(command.MessageId), Times.Once);
        }
示例#11
0
        public static DeleteMessageCommand ToDeleteMessageCommand(this JObject jObj)
        {
            var result = new DeleteMessageCommand();
            var values = jObj.ToObject <Dictionary <string, object> >();

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

            if (values.TryGet(MedikitApiConstants.DeleteMessageNames.MessageIds, out string message))
            {
                result.MessageIds = JArray.Parse(message).Select(_ => _.ToString()).ToList();
            }

            return(result);
        }
示例#12
0
        public async Task DeleteMessageCommandHandler_ShouldSoftDeleteMessage()
        {
            // Arrange
            DeleteMessageCommand request = new DeleteMessageCommand {
                MessageId = 1
            };

            IQueryable <Message> databaseMessage = new[]
            {
                new Message {
                    MessageId = 1, IsDeleted = false
                }
            }
            .AsQueryable()
            .BuildMock()
            .Object;

            Message passedMessage = null;

            _unitOfWorkMock
            .Setup(m => m.Messages.GetById(request.MessageId))
            .Returns(databaseMessage);

            _unitOfWorkMock
            .Setup(m => m.Messages.Update(It.IsAny <Message>()))
            .Callback <Message>(m => passedMessage = m);

            _unitOfWorkMock
            .Setup(m => m.CommitAsync(It.IsAny <CancellationToken>()))
            .ReturnsAsync(1);

            DeleteMessageCommand.Handler handler = new DeleteMessageCommand.Handler(_unitOfWorkMock.Object);

            // Act
            await handler.Handle(request);

            // Assert
            _unitOfWorkMock.Verify(m => m.Messages.Update(It.IsAny <Message>()), Times.Once);

            Assert.NotNull(passedMessage);
            Assert.Equal(request.MessageId, passedMessage.MessageId);
            Assert.True(passedMessage.IsDeleted);

            _unitOfWorkMock.Verify(m => m.CommitAsync(It.IsAny <CancellationToken>()), Times.AtLeastOnce);
        }
示例#13
0
        public async Task <ActionResult> DeleteMessage([FromRoute] int messageId, CancellationToken cancellationToken = default)
        {
            // Check if the message exists
            MessageExistsQuery existsQuery = new MessageExistsQuery {
                MessageId = messageId
            };

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

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

            // Check if the user is the author of the message and thus allowed to update it
            IsAuthorOfMessageQuery isAuthorQuery = new IsAuthorOfMessageQuery {
                MessageId = messageId
            };

            bool isAuthor = await _mediator.Send(isAuthorQuery, cancellationToken);

            if (!isAuthor)
            {
                return(StatusCode(StatusCodes.Status403Forbidden, new ErrorResource
                {
                    StatusCode = StatusCodes.Status403Forbidden,
                    Message = "Only the author of a message is allowed to delete a message"
                }));
            }

            // Delete the message
            DeleteMessageCommand deleteCommand = new DeleteMessageCommand {
                MessageId = messageId
            };

            await _mediator.Send(deleteCommand, cancellationToken);

            return(NoContent());
        }
示例#14
0
        private void btnDelete_Click(object sender, EventArgs e)
        {
            var msgs = lstMessages.SelectedItems.Cast <ListViewItem>().Select(item => (IMessage)item.Tag);

            if (msgs.Any())
            {
                string confirm;
                if (msgs.Count() == 1)
                {
                    confirm = "Delete this message?";
                }
                else
                {
                    confirm = "Delete these " + msgs.Count() + " messages?";
                }
                if (MessageBox.Show(confirm, "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    // delete messages from inbox/outbox/sentbox
                    foreach (var msg in msgs)
                    {
                        if (Empire.Current.IncomingMessages.Contains(msg) || Empire.Current.SentMessages.Contains(msg))
                        {
                            var cmd = new DeleteMessageCommand(msg);
                            Empire.Current.Commands.Add(cmd);
                            cmd.Execute();
                        }
                        var sendCommand = Empire.Current.Commands.OfType <SendMessageCommand>().SingleOrDefault(cmd => cmd.Message == msg);
                        if (sendCommand != null)
                        {
                            Empire.Current.Commands.Remove(sendCommand);
                        }
                    }

                    // refresh
                    BindEmpire(empire, tabDiplomacy);
                }
            }
            else
            {
                MessageBox.Show("Please select one or more messages to delete before clicking the delete button.");
            }
        }
示例#15
0
        /// <inheritdoc />
        public long Handle(DeleteMessageCommand <long> command)
        {
            using (var connection = _dbConnectionFactory.Create())
            {
                connection.Open();
                using (var trans = _transactionFactory.Create(connection).BeginTransaction())
                {
                    using (var commandSql = connection.CreateCommand())
                    {
                        commandSql.Transaction = trans;

                        //delete the meta data record
                        _prepareCommand.Handle(command, commandSql, CommandStringTypes.DeleteFromMetaData);
                        commandSql.ExecuteNonQuery();

                        //delete the message body
                        _prepareCommand.Handle(command, commandSql, CommandStringTypes.DeleteFromQueue);
                        commandSql.ExecuteNonQuery();

                        //delete any error tracking information
                        _prepareCommand.Handle(command, commandSql, CommandStringTypes.DeleteFromErrorTracking);
                        commandSql.ExecuteNonQuery();

                        _prepareCommand.Handle(command, commandSql, CommandStringTypes.DeleteFromMetaDataErrors);
                        commandSql.ExecuteNonQuery();

                        //delete status record
                        if (!_options.Value.EnableStatusTable)
                        {
                            trans.Commit();
                            return(1);
                        }

                        _prepareCommand.Handle(command, commandSql, CommandStringTypes.DeleteFromStatus);
                        commandSql.ExecuteNonQuery();
                        trans.Commit();
                        return(1);
                    }
                }
            }
        }
示例#16
0
        public async Task Should_fail_with_status_bad_request_when_attempting_to_delete_message_created_by_another_client()
        {
            // Arrange
            var message = MockedMessageBuilder
                          .SetId(1)
                          .SetMessage("The message")
                          .SetClientId(Guid.NewGuid().ToString())
                          .Build()
                          .Object;

            _mockedRepository.Setup(x => x.GetAsync(It.IsAny <int>())).ReturnsAsync(message);

            var command = new DeleteMessageCommand(message.Id, Guid.NewGuid().ToString());
            var handler = new DeleteMessageCommandHandler(_mockedRepository.Object);

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

            // Assert
            Assert.True(result.Failed);
            Assert.IsType <BadRequest>(result.StatusCode);

            _mockedRepository.Verify(x => x.GetAsync(command.MessageId), Times.Once);
        }
        private async Task OnMessageDeleted(DiscordClient client, MessageDeleteEventArgs eventArgs)
        {
            try
            {
                var channel = eventArgs.Channel;
                var message = eventArgs.Message;
                var guild   = eventArgs.Guild;

                if (IsPrivateMessageChannel(channel))
                {
                    return;
                }

                var messageId = message.Id;

                var todoMessage = new MessageIdPayload(messageId, guild);

                var command = new DeleteMessageCommand(todoMessage);

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

                var eventContextError = new EventErrorContext()
                {
                    EventName = nameof(OnMessageDeleted),
                    User      = null,
                    Channel   = eventArgs.Channel,
                    Guild     = eventArgs.Guild
                };

                await _discordErrorLogger.LogDiscordError(eventContextError, ex.ToString());
            }
        }
 /// <inheritdoc />
 public long Handle(DeleteMessageCommand <long> command)
 {
     return(!_databaseExists.Exists(_connectionInformation.ConnectionString) ? 0 : _decorated.Handle(command));
 }
示例#19
0
        /// <inheritdoc />
        public bool Handle(DeleteMessageCommand <string> command)
        {
            var result = _deleteLua.Execute(command.QueueId);

            return(result.HasValue && result.Value == 1);
        }
示例#20
0
 public async Task <ActionResult> Delete(
     [FromRoute] DeleteMessageCommand command)
 => await this.Send(command);
 public void MySetup()
 => _command = new DeleteMessageCommand(Logger, State);
示例#22
0
 public Task <bool> DeleteSentboxMessages(DeleteMessageCommand command)
 {
     command.Source = EHealthBoxSources.SENTBOX;
     return(_mediator.Send(command));
 }
示例#23
0
 public async Task Handle(DeleteMessageCommand command) => await command.Execute(_awsSqsClient);
示例#24
0
        public JsonResult DeleteMessage(DeleteMessageCommand command)
        {
            var result = _commandBus.Send(command);

            return(JsonMessage(result));
        }
示例#25
0
        public void Create_Default(string number)
        {
            var test = new DeleteMessageCommand <string>(number);

            Assert.Equal(number, test.QueueId);
        }