Busca por nome com destaque e navegação para página
This commit is contained in:
@@ -172,6 +172,24 @@ class RankingOracleRepository:
|
||||
|
||||
return results[0]["TOTAL"] if results else 0
|
||||
|
||||
def buscar_por_nome(self, nome: str, limit: int = 5) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
Busca consultores por nome (like), retornando posições.
|
||||
"""
|
||||
query = """
|
||||
SELECT
|
||||
ID_PESSOA,
|
||||
NOME,
|
||||
POSICAO,
|
||||
PONTUACAO_TOTAL
|
||||
FROM TB_RANKING_CONSULTOR
|
||||
WHERE UPPER(NOME) LIKE UPPER(:nome)
|
||||
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]:
|
||||
"""
|
||||
Busca consultor específico com sua posição no ranking.
|
||||
|
||||
@@ -17,6 +17,7 @@ from ..schemas.ranking_schema import (
|
||||
JobStatusSchema,
|
||||
ProcessarRankingRequestSchema,
|
||||
ProcessarRankingResponseSchema,
|
||||
ConsultaNomeSchema,
|
||||
)
|
||||
from .dependencies import get_repository, get_ranking_repository, get_processar_job
|
||||
from ...application.jobs.job_status import job_status
|
||||
@@ -113,6 +114,24 @@ async def ranking_paginado(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/ranking/busca", response_model=List[ConsultaNomeSchema])
|
||||
async def buscar_por_nome(
|
||||
nome: str = Query(..., min_length=3, description="Nome (ou parte) para buscar"),
|
||||
limit: int = Query(default=5, ge=1, le=20, description="Limite de resultados"),
|
||||
ranking_repo = Depends(get_ranking_repository),
|
||||
):
|
||||
resultados = ranking_repo.buscar_por_nome(nome=nome, limit=limit)
|
||||
return [
|
||||
ConsultaNomeSchema(
|
||||
id_pessoa=r["ID_PESSOA"],
|
||||
nome=r["NOME"],
|
||||
posicao=r["POSICAO"],
|
||||
pontuacao_total=float(r["PONTUACAO_TOTAL"]),
|
||||
)
|
||||
for r in resultados
|
||||
]
|
||||
|
||||
|
||||
def _consultor_resumo_from_ranking(c):
|
||||
consultoria = None
|
||||
coordenacoes_capes = None
|
||||
|
||||
@@ -63,3 +63,10 @@ class ProcessarRankingResponseSchema(BaseModel):
|
||||
sucesso: bool
|
||||
mensagem: str
|
||||
job_id: Optional[str] = None
|
||||
|
||||
|
||||
class ConsultaNomeSchema(BaseModel):
|
||||
id_pessoa: int
|
||||
nome: str
|
||||
posicao: Optional[int]
|
||||
pontuacao_total: float
|
||||
|
||||
Reference in New Issue
Block a user