fix(frontend): evitar erro por 409 em processamento (StrictMode)

This commit is contained in:
Frederico Castro
2025-12-15 00:26:30 -03:00
parent 6369ac5d22
commit 97322e5ad7

View File

@@ -1,4 +1,4 @@
import { useState, useEffect } from 'react';
import { useState, useEffect, useRef } from 'react';
import Header from './components/Header';
import ConsultorCard from './components/ConsultorCard';
import CompararModal from './components/CompararModal';
@@ -11,6 +11,7 @@ function App() {
const [error, setError] = useState(null);
const [processing, setProcessing] = useState(false);
const [processMessage, setProcessMessage] = useState('');
const processStartedRef = useRef(false);
const [total, setTotal] = useState(0);
const [page, setPage] = useState(1);
const [pageSize, setPageSize] = useState(50);
@@ -58,15 +59,29 @@ function App() {
if (status === 503) {
try {
setProcessing(true);
setProcessMessage('Ranking ainda não processado. Iniciando processamento...');
await rankingService.processarRanking(true);
if (!processStartedRef.current) {
processStartedRef.current = true;
setProcessMessage('Ranking ainda não processado. Iniciando processamento...');
try {
await rankingService.processarRanking(true);
} catch (e) {
const st = e?.response?.status;
if (st !== 409) throw e; // 409 = job já em execução (ex.: StrictMode)
}
} else {
setProcessMessage('Processamento do ranking já iniciado. Aguardando...');
}
while (true) {
const st = await rankingService.getStatus();
setProcessMessage(st.mensagem || `Processando... ${st.progress || 0}%`);
if (!st.running) {
if (st.erro) throw new Error(st.erro);
break;
try {
const st = await rankingService.getStatus();
setProcessMessage(st.mensagem || `Processando... ${st.progress || 0}%`);
if (!st.running) {
if (st.erro) throw new Error(st.erro);
break;
}
} catch (e) {
setProcessMessage('Aguardando status do processamento...');
}
await new Promise((r) => setTimeout(r, 4000));
}