feat: adicionar sistema de sugestao de consultores por tema
- Novo endpoint GET /api/v1/consultores/sugerir com busca por tema - Busca inteligente em areas de avaliacao, conhecimento e pesquisa - Filtro por consultores ativos e area de avaliacao especifica - Endpoint GET /api/v1/consultores/areas-avaliacao com lista de areas - Novo componente SugerirConsultores no frontend - Botao 'Sugerir por Tema' integrado na interface principal - Score de match baseado em relevancia do tema e experiencia
This commit is contained in:
@@ -3,6 +3,7 @@ import Header from './components/Header';
|
||||
import ConsultorCard from './components/ConsultorCard';
|
||||
import CompararModal from './components/CompararModal';
|
||||
import FiltroSelos from './components/FiltroSelos';
|
||||
import SugerirConsultores from './components/SugerirConsultores';
|
||||
import { rankingService } from './services/api';
|
||||
import './App.css';
|
||||
|
||||
@@ -23,6 +24,7 @@ function App() {
|
||||
const [selecionados, setSelecionados] = useState([]);
|
||||
const [modalAberto, setModalAberto] = useState(false);
|
||||
const [filtroSelos, setFiltroSelos] = useState([]);
|
||||
const [sugerirAberto, setSugerirAberto] = useState(false);
|
||||
|
||||
const toggleSelecionado = (consultor) => {
|
||||
setSelecionados((prev) => {
|
||||
@@ -42,6 +44,21 @@ function App() {
|
||||
setModalAberto(false);
|
||||
};
|
||||
|
||||
const handleSugestaoSelecionada = async (idPessoa) => {
|
||||
try {
|
||||
const resultados = await rankingService.searchConsultor(String(idPessoa), 1);
|
||||
if (resultados && resultados.length > 0) {
|
||||
const alvo = resultados[0];
|
||||
const pos = alvo.posicao || 1;
|
||||
const pagina = Math.ceil(pos / pageSize);
|
||||
setHighlightId(alvo.id_pessoa);
|
||||
setPage(pagina);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Erro ao navegar para consultor:', err);
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
loadRanking();
|
||||
}, [page, pageSize, filtroSelos]);
|
||||
@@ -198,6 +215,10 @@ function App() {
|
||||
onChange={(selos) => { setFiltroSelos(selos); setPage(1); }}
|
||||
/>
|
||||
|
||||
<button className="btn-sugerir" onClick={() => setSugerirAberto(true)}>
|
||||
Sugerir por Tema
|
||||
</button>
|
||||
|
||||
<form className="search-box" onSubmit={handleSubmitBuscar}>
|
||||
<input
|
||||
type="text"
|
||||
@@ -260,6 +281,13 @@ function App() {
|
||||
/>
|
||||
)}
|
||||
|
||||
{sugerirAberto && (
|
||||
<SugerirConsultores
|
||||
onClose={() => setSugerirAberto(false)}
|
||||
onSelectConsultor={handleSugestaoSelecionada}
|
||||
/>
|
||||
)}
|
||||
|
||||
<footer>
|
||||
<p>Dados: ATUACAPES (Elasticsearch) + Oracle</p>
|
||||
<p>Clique em qualquer consultor para ver detalhes</p>
|
||||
|
||||
Reference in New Issue
Block a user