1
resposta

Manipular transações

Amigos, estou desenvolvendo uma POC onde preciso cadastrar uma venda.

Para tanto, uso esse código:

this.salvarVenda = function(connection, objeto, response, callback){
        let sqlVenda = utilVenda.createSaveQuery(objeto);

        console.log(sqlVenda);

        connection.query(sqlVenda, function (error, results){
            if(error) throw error;

            const id_venda = 0;

            //Depois que salva a venda, usa-se o id persistido e salva-se os itens
            objeto.produtos.forEach((el) => {
                const sql =  utilVenda.createSaveQueryItems(el, id_venda);
                connection.query(sql, function(erro){
                    if(erro != null){
                        console.log("Response: " + response.statusCode);
                        response.status(500);
                        console.log("Response depois : " + response.statusCode);

                        console.log("Deu erro"/*erro*/);
                    }
                });   
            })

            callback();
        })
    }

Eu queria saber como deixar tudo numa transacao só e, caso algo der errado na segunda operacao, dar rollback na venda toda.

Ah, mais uma última coisa: Mesmo quando dá ero e seto o statusCode da response como 500, no meu frontEnd, no callback da Promise ainda recebo statusCode 200 :(

Obrigado desde já

1 resposta

Oi Matheus, tudo bem? Você está usando o MySQL como banco? Lá na documentação do pacote tem um exemplo bem legal de como fazer isso.

https://www.npmjs.com/package/mysql#transactions

Basicamente você usará quatro métodos: beginTransaction, query, commit e rollback.

Dá uma olhada e vê se consegue adaptar pro seu caso? Espero um feedback aqui.