fix(backend): corrigir exibicao de idiomas e selos multilingue
- Adicionar idiomas e formacoes ao _source das queries ES (client.py) - Corrigir type mismatch int/str no endpoint paginado (routes.py) - Adicionar campo evento nas inscricoes para nome do premio - Implementar extracao de idiomas do ES no repository - Ajustar frontend para exibir selo multilingue corretamente
This commit is contained in:
@@ -206,6 +206,8 @@ async def ranking_paginado(
|
||||
ativo: Optional[bool] = Query(default=None, description="Filtrar por status ativo"),
|
||||
selos: Optional[str] = Query(default=None, description="Filtrar por selos (separados por vírgula)"),
|
||||
oracle_repo = Depends(get_ranking_oracle_repo),
|
||||
es_client: ElasticsearchClient = Depends(get_es_client),
|
||||
repository: ConsultorRepositoryImpl = Depends(get_repository),
|
||||
):
|
||||
import json as json_lib
|
||||
|
||||
@@ -223,12 +225,46 @@ async def ranking_paginado(
|
||||
total_pages = (total + size - 1) // size
|
||||
|
||||
consultores_schema = []
|
||||
consultores_dados = []
|
||||
faltando_idiomas = []
|
||||
for c in consultores:
|
||||
try:
|
||||
d = json_lib.loads(c.json_detalhes) if isinstance(c.json_detalhes, str) else c.json_detalhes or {}
|
||||
except (json_lib.JSONDecodeError, TypeError):
|
||||
d = {}
|
||||
consultores_dados.append((c, d))
|
||||
if not d.get("idiomas"):
|
||||
faltando_idiomas.append((c.id_pessoa, d))
|
||||
|
||||
if faltando_idiomas:
|
||||
ids = [item[0] for item in faltando_idiomas]
|
||||
docs = await es_client.buscar_por_ids(
|
||||
ids,
|
||||
source_fields=["id", "dadosPessoais", "idiomas", "atuacoes", "formacoes"],
|
||||
)
|
||||
docs_map = {int(doc.get("id")): doc for doc in docs if doc.get("id")}
|
||||
for id_pessoa, detalhes in faltando_idiomas:
|
||||
doc = docs_map.get(int(id_pessoa))
|
||||
if not doc:
|
||||
continue
|
||||
idiomas = repository._extrair_idiomas(doc)
|
||||
if idiomas:
|
||||
detalhes["idiomas"] = [
|
||||
{
|
||||
"idioma": i.idioma,
|
||||
"nivel_leitura": i.nivel_leitura,
|
||||
"nivel_escrita": i.nivel_escrita,
|
||||
"nivel_fala": i.nivel_fala,
|
||||
"nivel_compreensao": i.nivel_compreensao,
|
||||
}
|
||||
for i in idiomas
|
||||
]
|
||||
if not detalhes.get("titulacao"):
|
||||
titulacao = repository._extrair_titulacao(doc)
|
||||
if titulacao:
|
||||
detalhes["titulacao"] = titulacao
|
||||
|
||||
for c, d in consultores_dados:
|
||||
tipos_atuacao = RankingMapper._extrair_tipos_atuacao(d)
|
||||
consultores_schema.append(
|
||||
ConsultorRankingResumoSchema(
|
||||
@@ -255,6 +291,8 @@ async def ranking_paginado(
|
||||
orientacoes=d.get("orientacoes"),
|
||||
membros_banca=d.get("membros_banca"),
|
||||
docencias=d.get("docencias"),
|
||||
idiomas=d.get("idiomas"),
|
||||
titulacao=d.get("titulacao"),
|
||||
pontuacao=d.get("pontuacao"),
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user