1
resposta

[Bug] Resposta inesperada na pesquisa de livros!

Estou tendo como retorno uma lista de livros favoritos a mais do que o esperado.

imagem pintada da tela do app alura-books

function insereFavorito(id){
    const livros = JSON.parse(fs.readFileSync("livros.json"))
    const favoritos = JSON.parse(fs.readFileSync("favoritos.json"))

    const livroInserido = livros.find( livro => livro.id === id)
    const novaListaDeLivroFavoritos = [...favoritos, livroInserido]
    fs.writeFileSync("favoritos.json", JSON.stringify(novaListaDeLivroFavoritos))
}
[
    {
      "id": "4",
      "nome": "Entendendo algoritmos"
    }

]
1 resposta

Oii Luiz, tudo bem?

Se ainda estiver com problemas, você poderia mandar o seu código completo? Assim podemos ter um contexto maior.

Mas levando em conta somente o código que você mandou, dá a entender que a função insereFavorito está inserindo um livro nos favoritos sempre que é chamada, sem verificar se o livro já existe na lista de favoritos. Isso pode resultar em duplicatas na sua lista de livros favoritos.

A solução seria modificar a função para verificar se o livro já está na lista de favoritos antes de adicioná-lo. Dessa forma:

function insereFavorito(id){
    const livros = JSON.parse(fs.readFileSync("livros.json"));
    const favoritos = JSON.parse(fs.readFileSync("favoritos.json"));

    const livroInserido = livros.find(livro => livro.id === id);

    // Verifica se o livro já está na lista de favoritos
    const jaEhFavorito = favoritos.some(favorito => favorito.id === livroInserido.id);

    // Se não estiver na lista, adiciona o livro aos favoritos
    if (!jaEhFavorito) {
        const novaListaDeLivroFavoritos = [...favoritos, livroInserido];
        fs.writeFileSync("favoritos.json", JSON.stringify(novaListaDeLivroFavoritos));
    }
}

No código, a função some é usada para verificar se algum livro na lista de favoritos tem o mesmo id que o livro que está sendo inserido. Se o livro não for encontrado na lista de favoritos (jaEhFavorito é false), então ele é adicionado à lista.

E por favor, veja se a função insereFavorito não está sendo chamada mais vezes do que o necessário, o que também poderia causar a inserção de múltiplas cópias do mesmo livro.

Essa a sugestão que dou levando em conta o código que você mandou.

Um abraço e bons estudos.