public IQueryResult Handle(BuscarAdminQuery command)
        {
            command.Validate();

            if (command.Invalid)
            {
                return(new GenericQueryResult(false, "Dados inválidos", command.Notifications));
            }

            var adminProcurado = _adminRepositorio.BuscarPorId(command.Id);

            if (adminProcurado == null)
            {
                return(new GenericQueryResult(false, "Administrador não encontrado", null));
            }

            var result = new BuscarAdminResult
            {
                Id       = adminProcurado.Id,
                Nome     = adminProcurado.NomeUsuario,
                Email    = adminProcurado.Email,
                Telefone = adminProcurado.Telefone
            };

            return(new GenericQueryResult(true, "Dados do administrador", result));
        }
        public ICommandResult Handler(AlterarContaCommand command)
        {
            //Verifica se o comando recebido é válido.
            command.Validar();

            //Verifica se os dados são válidos.
            if (command.Invalid)
            {
                return(new GenericCommandResult(false, "Dados Inválidos", command.Notifications));
            }

            //Variável de apoio para validação de email.
            var usuarioExiste = _adminRepositorio.BuscarPorId(command.Id);

            //Verifica se o email do usuário já foi cadastrado no banco.
            if (usuarioExiste == null)
            {
                return(new GenericCommandResult(false, "Administrdor não encontrado", null));
            }

            if (command.Email != usuarioExiste.Email)
            {
                var novoEmailExistente = _adminRepositorio.BuscarPorEmail(command.Email);

                if (novoEmailExistente != null)
                {
                    return(new GenericCommandResult(false, "Este e-mail já está vinculado a uma conta, informe outro email", command.Notifications));
                }
            }

            usuarioExiste.AlterarAdmin(command.Nome, command.Email, command.Telefone);

            if (usuarioExiste.Invalid)
            {
                return(new GenericCommandResult(false, "Dados inválidos", usuarioExiste.Notifications));
            }

            _adminRepositorio.Alterar(usuarioExiste);

            return(new GenericCommandResult(true, "Administrador alterado com sucesso", usuarioExiste));
        }