public async Task <ICommandResult> Handle(CadastrarFuncionarioCommand command, CancellationToken cancellationToken)
        {
            var result = new CommandResult(false, "Não foi possível cadastrar Funcionário.");

            if (!command.IsValid())
            {
                return(result.AddNotifications("Dados Inválidos!"));
            }

            if (service.ExisteEmail(command.Email))
            {
                return(result.AddNotifications("Email já cadastrado"));
            }

            if (service.ExisteCPF(command.Cpf))
            {
                return(result.AddNotifications("CPF já cadastrado"));
            }

            var funcionario = new Funcionario();

            try
            {
                funcionario = FuncionarioAdapter.CadastrarFuncionarioCommandToFuncionario(command);
                service.Adicionar(funcionario);
            }
            catch (Exception ex)
            {
                return(new CommandResult(false, $"Ocorreu um erro ao cadastrar Funcionário. Erro.: {ex.Message}"));
            }

            new Thread(() => cadastrarFuncionarioEventHandler.Handle(
                           FuncionarioAdapter.FuncionarioToCadastrarFuncionarioEvent(funcionario), CancellationToken.None)
                       ).Start();

            if (!await service.SaveChanges())
            {
                return(result);
            }

            return(new CommandResult(true, "Funcionário cadastrado com sucesso!"));
        }