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

@@ -99,11 +99,19 @@ class RankingOracleRepository:
"""
Busca ranking paginado ordenado por posição.
"""
if page < 1:
page = 1
if size < 1 or size > 10000:
size = 50
offset = (page - 1) * size
limit_end = offset + size
where_clause = ""
params = {}
params = {
"offset": offset,
"limit_end": limit_end,
}
if filtro_ativo is not None:
where_clause = "AND ATIVO = :ativo"
@@ -128,7 +136,7 @@ class RankingOracleRepository:
FROM TB_RANKING_CONSULTOR
WHERE 1=1 {where_clause}
)
WHERE RN > {offset} AND RN <= {limit_end}
WHERE RN > :offset AND RN <= :limit_end
"""
results = self.client.executar_query(query, params)