Melhora busca por nome para procurar cada palavra separadamente

This commit is contained in:
Frederico Castro
2025-12-13 10:15:46 -03:00
parent c91a2e931f
commit 8a8b4230c2

View File

@@ -174,20 +174,34 @@ class RankingOracleRepository:
def buscar_por_nome(self, nome: str, limit: int = 5) -> List[Dict[str, Any]]: 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 SELECT
ID_PESSOA, ID_PESSOA,
NOME, NOME,
POSICAO, POSICAO,
PONTUACAO_TOTAL PONTUACAO_TOTAL
FROM TB_RANKING_CONSULTOR FROM TB_RANKING_CONSULTOR
WHERE UPPER(NOME) LIKE UPPER(:nome) WHERE {where_clause}
ORDER BY POSICAO NULLS LAST ORDER BY POSICAO NULLS LAST
FETCH FIRST :limit ROWS ONLY FETCH FIRST :limit ROWS ONLY
""" """
params = {"nome": f"%{nome}%", "limit": limit}
return self.client.executar_query(query, params) return self.client.executar_query(query, params)
def buscar_por_id(self, id_pessoa: int) -> Optional[ConsultorRanking]: def buscar_por_id(self, id_pessoa: int) -> Optional[ConsultorRanking]: