From 8a8b4230c21f056c03cc85190c57ab0b29b0cd8b Mon Sep 17 00:00:00 2001 From: Frederico Castro Date: Sat, 13 Dec 2025 10:15:46 -0300 Subject: [PATCH] Melhora busca por nome para procurar cada palavra separadamente --- .../oracle/ranking_repository.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/backend/src/infrastructure/oracle/ranking_repository.py b/backend/src/infrastructure/oracle/ranking_repository.py index ee0c94a..4aef226 100644 --- a/backend/src/infrastructure/oracle/ranking_repository.py +++ b/backend/src/infrastructure/oracle/ranking_repository.py @@ -174,20 +174,34 @@ class RankingOracleRepository: def buscar_por_nome(self, nome: str, limit: int = 5) -> List[Dict[str, Any]]: """ - Busca consultores por nome (like), retornando posições. + Busca consultores por nome, procurando cada palavra separadamente. """ - query = """ + palavras = [p.strip() for p in nome.upper().split() if len(p.strip()) >= 2] + + if not palavras: + return [] + + conditions = [] + params = {"limit": limit} + + for i, palavra in enumerate(palavras): + param_name = f"p{i}" + conditions.append(f"UPPER(NOME) LIKE :{param_name}") + params[param_name] = f"%{palavra}%" + + where_clause = " AND ".join(conditions) + + query = f""" SELECT ID_PESSOA, NOME, POSICAO, PONTUACAO_TOTAL FROM TB_RANKING_CONSULTOR - WHERE UPPER(NOME) LIKE UPPER(:nome) + WHERE {where_clause} ORDER BY POSICAO NULLS LAST FETCH FIRST :limit ROWS ONLY """ - params = {"nome": f"%{nome}%", "limit": limit} return self.client.executar_query(query, params) def buscar_por_id(self, id_pessoa: int) -> Optional[ConsultorRanking]: