fix: resolver problemas identificados no code review

Correções de segurança:
- SQL Injection: usar prepared statements em ranking_repository.py
- Validação de entrada para parâmetros page/size

Correções de bugs:
- Bônus de continuidade: 15→20 pts para 8+ anos (conforme especificação)
- Memory leak: limpar _consultores após processamento do ranking

Melhorias de robustez:
- Substituir bare except por exceções específicas
- Threading.Lock para padrão singleton thread-safe
- Pool Oracle com configuração otimizada (timeout/getmode)
- ES client com timeouts diferenciados e verificação is_closed
- Logging para tipos de coordenação desconhecidos

Correções frontend:
- Polling com timeout máximo de 5 minutos
- useEffect cleanup para setTimeout
- React.memo e useMemo para otimização de performance
This commit is contained in:
Frederico Castro
2025-12-15 07:11:28 -03:00
parent d639b82087
commit df3d03d3b2
10 changed files with 91 additions and 37 deletions

View File

@@ -72,7 +72,11 @@ function App() {
setProcessMessage('Processamento do ranking já iniciado. Aguardando...');
}
while (true) {
const MAX_POLLING_TIME = 5 * 60 * 1000;
const POLLING_INTERVAL = 4000;
const startTime = Date.now();
while (Date.now() - startTime < MAX_POLLING_TIME) {
try {
const st = await rankingService.getStatus();
setProcessMessage(st.mensagem || `Processando... ${st.progress || 0}%`);
@@ -83,7 +87,11 @@ function App() {
} catch (e) {
setProcessMessage('Aguardando status do processamento...');
}
await new Promise((r) => setTimeout(r, 4000));
await new Promise((r) => setTimeout(r, POLLING_INTERVAL));
}
if (Date.now() - startTime >= MAX_POLLING_TIME) {
throw new Error('Timeout: processamento demorou mais que 5 minutos');
}
const response = await rankingService.getRanking(page, pageSize);