Se uma operação pode falhar de forma imprevisível (rede, banco, APIs externas) e/ou quebrar a aplicação, use try/catch.
O try, como o próprio termo diz, vai tentar executar algum bloco de código, caso não consiga, o catch pega o problema e faz algo. Isso faz com que a aplicação permaneça executando sem quebrar e você consegue preparar seu código para lidar com as exceções.
No seu caso, que envolve async/await o ideal é SEMPRE utilizar.
Sobre criar classe para lidar com todos os tipos de erro, acaba sendo inviável porque há diversos erros, geralmente no catch se usar uma classe de genérica para capturar ele e o próprio dev realizar o debug. Testes unitários ajudam também a evitar que erros ocorram.
No seu caso:
async atualizaRegistro(dadosAtualizados, id) {
try {
if (!id || !dadosAtualizados) {
return { sucesso: false, erro: 'ID e dados são obrigatórios' };
}
const [numRegistrosAtualizados] = await dataSource[this.model].update(dadosAtualizados, {
where: { id: id }
});
if (numRegistrosAtualizados === 0) {
return {
sucesso: false,
erro: 'Registro não encontrado'
};
}
return {
sucesso: true,
registrosAtualizados: numRegistrosAtualizados
};
} catch (error) {
console.error('Erro ao atualizar registro:', {
id,
erro: error.message
});
return {
sucesso: false,
erro: 'Erro interno do sistema'
};
}
}