Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Função editaCliente criando um NOVO cliente

Olá pessoal. Tudo beleza? Curso: FETCH API: CONSUMINDO UMA API REST COM JAVASCRIPT AULA 05 - EditandoDados Dos Clientes - Video 3

Minha função editaCLiente está criando um novo cliente ao invés de apenas editá-lo. Assim sempre que eu clico no botão Enviar duplica-se o cliente que editei.

Seguem os códigos:

clientes.js

const listarClientes = () => {
    return fetch('http://localhost:4000/clientes')
    .then( resposta => {
        return resposta.json()
    })
    .then( json => {
        return json
    })
}

const cadastrarClientes = (nome, cpf) => {
    const json = JSON.stringify({
        nome: nome,
        cpf: cpf
    })
    return fetch('http://localhost:4000/clientes/cliente',{
        method: 'POST',
        headers: {
            'Content-type' : 'application/json'
        },
        body: json
    })
    .then(resp => {
        return resp.body
    })
}
const deleteCliente = id => {
    return fetch(`http://localhost:4000/clientes/cliente/${id}`, {
        method: 'DELETE'
    })
}

const detalhaCliente = id => {
    return fetch(`http://localhost:4000/clientes/cliente/${id}`, 
    {
        method: 'GET'
    })
    .then(resposta => {
        return resposta.json()
    })
}

const editaCliente = (id, cpf, nome ) => {
    const json = JSON.stringify({
        nome: nome,
        cpf: cpf
    })
    return fetch(`http://localhost:4000/clientes/cliente/${id}`,{
        method: 'PUT',
        headers: {
            'Content-type' : 'application/json'
        },
        body: json
    })
    .then(resp => {
        return resp.body
    })
}

listagem-clientes.js

const removeCliente = id => {
    if(confirm('Deseja deletar o cliente?')){
        deleteCliente(id)
        document.location.reload()
    }
}
const corpoTabela = document.querySelector('[data-conteudo-tabela]')


const exibeCliente = (cpf, nome, id) => {
    const linha = document.createElement('tr')

    const conteudoLinha = 
        `<td>${cpf}</td>
         <td>${nome}</td>
         <button type='button' class='btn btn-danger' onclick='removeCliente(${id})'>Excluir</button>     
         <a href='edita-clientes.html?id=${id}'>
         <button type='button' class='btn btn-info'>Editar</button>
         </a>

         `

    linha.innerHTML = conteudoLinha
    return linha
}

listarClientes().then( exibe => {
    exibe.forEach( indice => {
        corpoTabela.appendChild( exibeCliente 
            (indice.cpf, indice.nome, indice.id))
    })
})

edita-cliente.js

const pegaURL = new URL(window.location)

const id = pegaURL.searchParams.get('id')

const inputCPF = document.querySelector('[data-cpf]')
const inputNome = document.querySelector('[data-nome]')

detalhaCliente(id).then( dados => {
    inputCPF.value = dados[0].cpf
    inputNome.value = dados[0].nome
})

const formEdicao = document.querySelector('[data-form]')

const mensagemSucesso = (mensagem) => {
    const linha = document.createElement('tr')

    const conteudoLinha = 
        `
         <div class='alert alert-success' role= 'alert'>
            ${mensagem}
         </div>
         `

    linha.innerHTML = conteudoLinha
    return linha;
}

const mensagemErro = (mensagem) => {
    const linha = document.createElement('tr')

    const conteudoLinha = 
        `
         <div class='alert alert-warning' role= 'alert'>
            ${mensagem}
         </div>
         `

    linha.innerHTML = conteudoLinha
    return linha;
}

formEdicao.addEventListener('submit', event => {
    event.preventDefault()

    if(!validaCPF(inputCPF.value)){
        alert('ESSE CPF NÃO EXISTE')
        return
    }

    editaCliente(id, inputCPF.value, inputNome.value )    
    .then
    (resposta => {
        if (resposta.status === 200){
            formEdicao.appendChild(mensagemSucesso(
                'Cliente Editado com Sucesso!'
            ))
        }
        else{
            formEdicao.appendChild(mensagemErro(
                'Erro ao editar o cliente'
            ))
        }
    }) 
})

Obrigado desde já.

6 respostas

Olá.

Alguém conseguiu ver onde está meu erro? Não encontro de jeito nenhum. Muito obrigado

Fala ai Salatiel, tudo bem? Apenas olhando o código é bem complicado descobrir o problema, posso deixar passar algum detalhe facilmente.

Sendo assim, vou pedir que compartilhe o projeto completo comigo, inclusive o servidor.

Pode fazer isso através do Github ou Google Drive (zipado).

Fico no aguardo.

Olá Mateus. Tudo beleza!

O meu projeto inteiro vou deixar o link do meu github.

https://github.com/salatielaizza/Petshop

Muitíssimo obrigado desde já. Desculpa ai a demora para os links.

solução!

Fala Salatiel, dei uma olhada no projeto, o problema é que sua página de edição (edita-clientes.html) está importando o .js de cadastro:

<script src="cadastro-clientes.js"></script>

Remove esse arquivo que a edição deve funcionar corretamente.

Espero ter ajudado.

Mateus, deu certo cara!!!! Infinitos obrigados.

Saúde e paz. S2

Magina Salatiel, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.