Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Reclamação] Crítica: falta de clareza na nova versão do APP

Neste vídeo, é informado que houve atualizações e, nos orienta a realizar um clone de um projeto já alterado e atualizado.

Ficou com uma vasta falta de clareza, dos motivos das atualizações, tanto como a falta de informações do que foi alterado.

Ao comparar um projeto com outro, houve mudanças significativas, com novos elementos, e isso teria sido bom, se tivesse sido explicado ou alterado em vídeo, para melhor esclarecimento e aprendizado dessa refatoração.

Ficou parecendo uma troca as pressas do tipo: joga ai a aplicação atualizada e, esta tudo certo.

Poderiam ao menos ter criado na transcriação da aula, uma pequena documentação com todas as alterações e mudanças e seus motivos.

Exemplos das mudanças, sem ao menos comentários no código alterado, para melhor esclarecimento: Antes:

static async listarLivros(req, res) { ... }

Depois:

    static listarLivros = async (req, res) => { ... }

Antes:

static async listarLivroPorId(req, res) {
        try {
            const id = req.params.id
            const livroEncontrado = await livro.findById(id)

            r...
        } catch (err) { ... }
    }

Depois: reparem que foi adicionado métodos do mongodb(populate e exec), ambos juntos, sem explicações

  static listarLivroPorId = async (req, res) => {
    try {
      const id = req.params.id;

      const livroResultados = await livros.findById(id)
        .populate("autor", "nome")
        .exec();

      ...
    } catch (erro) { ... }
  }

Antes:

    static async cadastrarLivro(req, res) {
        const novoLivro = req.body
    
        try {
            const autorEncontrado = await autor.findById(novoLivro.autor)
            const livroCompleto = {...novoLivro, autor: {...autorEncontrado._doc}}
            const livroCriado = await livro.create(livroCompleto)

            ...
        } catch (err) { ... }
    }

Depois: este é uma das funções em que precisava muito de detalhes e informações sobre as mudanças, pois as alterações aqui, foram bem significativas, pois, não há mais a junção de livro com autor. Existe apenas um método "save()"

  static cadastrarLivro = async (req, res) => {
    try {
      let livro = new livros(req.body);

      const livroResultado = await livro.save();

      r...
    } catch (erro) { ... }
  }

Me senti frustrado, esses foram apenas alguns exemplos de mais mudanças que ainda existem, mas seguimos. Por favor, tenham mais atenção com esses detalhes, nas próximas mudanças. Se importem em informar o máximo possível, afinal, somos alunos.

1 resposta
solução!

Oi Marco, tudo bem?

Entendo sua frustração e agradeço por compartilhar seus sentimentos e preocupações conosco. Sua crítica é muito importante para nós, pois nos ajuda a melhorar a qualidade do nosso conteúdo.

Compreendo que a transição entre as versões do projeto pode ter sido confusa. A ideia era que os alunos continuassem a partir de um projeto já refatorado, mas entendo que isso pode ter causado um sentimento de perda de aprendizado, principalmente porque algumas mudanças significativas foram feitas sem explicações detalhadas.

Vamos analisar algumas das mudanças que você apontou:

  1. Mudança na declaração de funções:

Antes:

static async listarLivros(req, res) { ... }

Depois:

static listarLivros = async (req, res) => { ... }

Neste caso, a mudança é puramente estilística. Ambas as formas são válidas para declarar métodos em uma classe em JavaScript. A segunda forma usa uma arrow function, que tem algumas diferenças sutis em relação à primeira forma, mas que não afetam o comportamento neste contexto.

  1. Adição dos métodos populate e exec:
const livroResultados = await livros.findById(id)
  .populate("autor", "nome")
  .exec();

O método populate é usado para preencher automaticamente os dados referenciados em um documento, neste caso, o nome do autor de um livro. O método exec é usado para executar a consulta.

  1. Mudança na função de cadastro de livros:

Antes:

const autorEncontrado = await autor.findById(novoLivro.autor)
const livroCompleto = {...novoLivro, autor: {...autorEncontrado._doc}}
const livroCriado = await livro.create(livroCompleto)

Depois:

let livro = new livros(req.body);
const livroResultado = await livro.save();

Neste caso, a mudança é mais profunda. Na versão anterior, o autor do livro era buscado no banco de dados e anexado ao novo livro antes de ser criado. Na nova versão, isso não é feito. Em vez disso, o livro é criado diretamente a partir dos dados recebidos na requisição. Isso implica que o cliente da API deve fornecer o ID do autor ao criar um novo livro.

Sinto muito se essas mudanças causaram confusão. No futuro, vamos nos esforçar para fornecer explicações mais detalhadas quando fizermos mudanças significativas nos projetos.

Espero ter ajudado.

Um abraço e bons estudos.