public void Send(ICommand command)
        {
            try
            {
                _logger.Log(LogType.Info, $"Started to handle command {command.GetClassName()} with Id: {command.GetId()}");
                _commandQueue.ChangeCommandStatus(command, Status.InProgress);

                var handler = _handlerFactory.Get(command.GetType());
                handler.Handle(command);

                _commandQueue.ChangeCommandStatus(command, Status.Success);
                _logger.Log(LogType.Info, $"Finished to handle command {command.GetClassName()} with Id: {command.GetId()}");
            }
            catch (System.Exception e)
            {
                _commandQueue.ChangeCommandStatus(command, Status.Failed);
                _logger.Log(LogType.Error, $"Failed to handle command {command.GetClassName()} with Id: {command.GetId()}|{e.Message}");
                throw;
            }
            finally
            {
                if (command.IsInProgress())
                {
                    _commandQueue.ChangeCommandStatus(command, Status.New);
                    _logger.Log(LogType.Info, $"Handling of command {command.GetClassName()} with Id: {command.GetId()} left unfinished, changed status to new again");
                }
            }
        }