Melhora busca por nome para procurar cada palavra separadamente
This commit is contained in:
@@ -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]:
|
||||||
|
|||||||
Reference in New Issue
Block a user