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

Registro não atualiza

Quando envio uma requisição para atualizar o registro o Postman retorna como registro atualizado, porém ao fazer um get o registro não sofreu alteração. mesmo não está sendo atualizado. Já refiz todo o projeto passo a passo, porém não encontrei o motivo de não estar atualizando.

Put após envio informando que registro foi atualizado com sucesso

Retorno do Get pós atualização com o registro não atualizado

Segue o Controller:

class Controller {
    constructor(entidadeService) {
        this.entidadeService = entidadeService;
    }

    async pegaTodos(req, res) {
        try {
            const listaDeRegistros = await this.entidadeService.pegaTodosOsRegistros();
            return res.status(200).json(listaDeRegistros);
        } catch (erro) {
            // erro
        }
    }

    async atualiza(req, res) {
        const { id } = req.params;
        const dadosAtualizados = req.body;
        try {
            const foiAtualizado = await this.entidadeService.atualizaRegistro(dadosAtualizados, Number(id));
            if (!foiAtualizado) {
                return res.status(400).json({ mensagem: 'Não foi possível atualizar o registro!'});
            }
            return res.status(200).json({ mensagem: 'Registro atualizado com sucesso!'});
        } catch (erro) {
            // erro
        }
    }
}

module.exports = Controller;

Segue também o Services:

const dataSource = require('../models');

class Services {
    constructor(nomeDoModel) {
        this.model = nomeDoModel;
    }

    async pegaTodosOsRegistros() {
        return dataSource[this.model].findAll();
    }

    async atualizaRegistro(dadosAtualizados, id) {
        const listadeRegistrosAtualizados = dataSource[this.model].update(dadosAtualizados, {
          where: { id: id }
        });
        if (listadeRegistrosAtualizados[0] === 0) {
          return false;
        }
        return true;
      }
    
};

module.exports = Services;
2 respostas

Olá, Alexandre!

Analisando o código que você compartilhou e as imagens do Postman, parece que o seu método de atualização está sendo executado, mas o registro não está sendo efetivamente alterado no banco de dados. Isso pode acontecer por algumas razões. Vamos verificar algumas possibilidades:

  1. Confirmação da Transação: No Sequelize, dependendo da configuração, pode ser necessário confirmar a transação para que as alterações sejam salvas no banco de dados. Verifique se você está chamando o método save() após a atualização ou se está utilizando alguma transação que precisa ser confirmada.

  2. Retorno do Método update: O método update do Sequelize retorna uma Promise que resolve com um array contendo o número de registros afetados. No seu serviço atualizaRegistro, você está aguardando essa Promise com await? Se não, isso pode ser um problema, pois você está retornando true antes da operação de atualização ser concluída. O código correto seria:

async atualizaRegistro(dadosAtualizados, id) {
    const [numeroDeRegistrosAtualizados] = await dataSource[this.model].update(dadosAtualizados, {
        where: { id: id }
    });
    return numeroDeRegistrosAtualizados > 0;
}
  1. Dados Enviados na Requisição: Verifique se os dados que você está enviando na requisição PUT estão corretos e se correspondem aos campos que devem ser atualizados no modelo do Sequelize.

  2. Middleware de Autenticação/Validação: Se houver algum middleware de autenticação ou validação de dados antes da execução do método de atualização, certifique-se de que não está interrompendo a requisição ou alterando os dados de maneira inesperada.

  3. Cache: Se estiver usando algum mecanismo de cache, certifique-se de que o cache esteja sendo invalidado após a atualização para que os dados mais recentes sejam retornados na requisição GET.

  4. Logs: Adicione logs no seu serviço para verificar se o método de atualização está sendo chamado e se os dados estão sendo passados corretamente.

Se após verificar esses pontos o problema persistir, recomendo que você confira se o modelo do Sequelize está configurado corretamente e se o banco de dados está respondendo às operações de atualização como esperado. Você também pode comparar o seu código com os exemplos fornecidos nos links da aula para ver se há alguma discrepância.

Espero ter ajudado e bons estudos!

solução!

Obrigado pela ajuda Renan.

Realmente não estava aguardando o retorno do método, pois não tinha enviado o await no serviço, porém o problema por não atualizar estava na verdade na requisição, pois o postman não estava configurado para enviar o content-type correto e depois do ajuste o problema foi sanado

Muito obrigado.