Automatiza componente B e ajuste frontend do ranking
This commit is contained in:
@@ -9,11 +9,63 @@ const api = axios.create({
|
||||
});
|
||||
|
||||
export const rankingService = {
|
||||
async getRanking(limite = 100, componente = null) {
|
||||
const params = { limite };
|
||||
if (componente) params.componente = componente;
|
||||
const response = await api.get('/ranking/detalhado', { params });
|
||||
return response.data;
|
||||
async getRanking(limite = 100) {
|
||||
// Usa ranking paginado (Oracle) para não depender do Elasticsearch
|
||||
const params = { page: 1, size: limite };
|
||||
const response = await api.get('/ranking/paginado', { params });
|
||||
const data = response.data;
|
||||
|
||||
// Adapta para o formato esperado pelo frontend
|
||||
const hoje = new Date();
|
||||
|
||||
const consultores = (data.consultores || []).map((c) => {
|
||||
const anos = Number(c.anos_atuacao || 0);
|
||||
const consultoria = c.consultoria || {};
|
||||
const primeiroEvento = consultoria.primeiro_evento
|
||||
? new Date(consultoria.primeiro_evento)
|
||||
: (() => {
|
||||
const d = new Date(hoje);
|
||||
d.setFullYear(d.getFullYear() - Math.floor(anos));
|
||||
return d;
|
||||
})();
|
||||
|
||||
return {
|
||||
id_pessoa: c.id_pessoa,
|
||||
nome: c.nome,
|
||||
rank: c.posicao,
|
||||
posicao: c.posicao,
|
||||
pontuacao_total: c.pontuacao_total,
|
||||
componente_a: c.componente_a,
|
||||
componente_b: c.componente_b,
|
||||
componente_c: c.componente_c,
|
||||
componente_d: c.componente_d,
|
||||
ativo: c.ativo,
|
||||
anos_atuacao: c.anos_atuacao,
|
||||
veterano: anos >= 10,
|
||||
pontuacao: {
|
||||
pontuacao_total: c.pontuacao_total,
|
||||
componente_a: { base: c.componente_a, tempo: 0, extras: 0, bonus: 0, retorno: 0, total: c.componente_a },
|
||||
componente_b: { base: c.componente_b, tempo: 0, extras: 0, bonus: 0, retorno: 0, total: c.componente_b },
|
||||
componente_c: { base: c.componente_c, tempo: 0, extras: 0, bonus: 0, retorno: 0, total: c.componente_c },
|
||||
componente_d: { base: c.componente_d, tempo: 0, extras: 0, bonus: 0, retorno: 0, total: c.componente_d },
|
||||
},
|
||||
consultoria: {
|
||||
total_eventos: consultoria.total_eventos ?? 0,
|
||||
eventos_recentes: consultoria.eventos_recentes ?? 0,
|
||||
vezes_responsavel: consultoria.vezes_responsavel ?? 0,
|
||||
primeiro_evento: consultoria.primeiro_evento || primeiroEvento.toISOString(),
|
||||
ultimo_evento: consultoria.ultimo_evento || null,
|
||||
},
|
||||
coordenacoes_capes: [],
|
||||
coordenacoes_programas: [],
|
||||
premiacoes: [],
|
||||
}});
|
||||
|
||||
return {
|
||||
total: data.total,
|
||||
total_pages: data.total_pages,
|
||||
consultores,
|
||||
};
|
||||
},
|
||||
|
||||
async getConsultor(idPessoa) {
|
||||
|
||||
Reference in New Issue
Block a user