Saudações, comunidade!
Estou enfrentando um verdadeiro desafio de persistência e precisava de um pouco de ajuda. Estou lidando com um caso complicado de controle de transações usando AJAX. Já estou aplicando o controle de transações conforme aprendi no curso, mas parece que algo não está funcionando conforme esperado.
Explicando melhor, tenho um sistema AJAX que se comunica com o backend e executa uma série de operações de cadastro, que são compostas por várias queries. No entanto, se o usuário atualizar a página logo após clicar no botão que aciona o AJAX, parece que algumas informações podem ser salvas no banco de dados de forma incompleta.
Alguém já se deparou com essa situação antes? Ou teria alguma sugestão adicional para garantir que minhas transações sejam tratadas corretamente?
Códigos abaixo:
<?php
ob_start();
session_start();
//TODOS OS REQUIRES NECESSÁRIOS ESTÃO AQUI
//Objetos essenciais da página
$sistema = new Sistema();
$sistema->verificarSessao();
$CD_Sessao = $sistema->retornarSessao('logado');
//Cria usuário
$usuario = new Usuario($CD_Sessao);
$dados = $usuario->buscarDados();
$usuario->verificarBloqueio();
//Retornar o nível sistemico do usário logado em questão
$nivelSistemicoUsuario = $usuario->retornarNivel();
//Verifica acessibilidade do usuário pela página
// Lê o corpo da solicitação JSON
$jsonData = file_get_contents("php://input");
// Decodifique o JSON para obter um array associativo
$dados = json_decode($jsonData, true);
try{
$conexao->beginTransaction();
// Itere sobre o array para obter objetos em PHP
foreach ($dados as $item) {
$codigoSaida = $item['codigoSaida'];
$codigoProduto = $item['codigoProduto'];
$nomeProduto = $item['nomeProduto'];
$quantProdutoSaida = $item['quantProdutoSaida'];
// Agora você pode usar essas variáveis para criar objetos ou fazer o que quiser
// Por exemplo, criar um objeto stdClass para cada item
$objeto = new Produto($codigoProduto, $nomeProduto, "descricao", 0, 0, 0, 0);
// Faça algo com o objeto, por exemplo, adicioná-lo a um array de objetos
$objetos[] = $objeto;
//Gera o balanco como entrada no banco de dados (tabela balanço)
$objeto->gerarBalaco($quantProdutoSaida, $usuario->retornarCPF(), "ENTRADA_.{$codigoSaida}");
// Instanciar e chamar o método para cadastrar cada objeto no banco de dados (tabela produtos)
$objeto->registrarEntradaDoProduto($codigoSaida, $quantProdutoSaida);
//Executa a operação de subtração do produto em questão e salva a quantia apenas no atributo de quantidade em estoque
$objeto->somar($quantProdutoSaida);
}
$conexao->commit();
}catch(PDOException $e){
$conexao->rollBack();
}
//FIM DO PROGRAMA
exit;
Agradeço imensamente pela ajuda!