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]: