diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 56cd00f..8987132 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -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)); }