Motor de Compatibilidade
O cérebro do aplicativo. O Motor de Matches do M4TCH.AI processa o JSON de respostas do usuário contra todos os outros perfis no banco de dados, retornando uma pontuação fragmentada e precisa.
Como a Nota é Calculada (Match Score)
A nota final (score_total) que o usuário vê na tela não é uma média simples. Ela é ponderada dando peso às coisas que mais importam para um relacionamento a longo prazo:
Eixo Emocional
Calculado através do cruzamento de Traços de Personalidade (Qualidades/Defeitos) e Interesses/Hobbies. A maior carga da nota.
Eixo Social
Derivado das respostas de Estilo de Vida (Um ou Outro), Nível de Educação e Geolocalização (CEP idêntico gera bônus).
Eixo Físico
Preferências de aparência física cruzadas e Decaimento Linear matemático baseado na diferença de idade exigida.
Antes de qualquer cálculo matemático, o motor roda um Gate de Gênero. Se o que o Usuário A busca não for igual ao que o Usuário B é, a compatibilidade é bloqueada (totalPct: 0) e eles nunca se verão no Feed.
1. Resgatar Feed de Sugestões
/api/matches/list/{userId}
Este é o endpoint principal que alimenta as telas HomeScreen (Feed) e MatchesScreen (Filtros Avançados) do Frontend. Ele retorna a lista pronta e calculada.
{
"ok": true,
"matches": [
{
"candidate_id": 85,
"name": "Isabella",
"age": 24,
"distance_km": 12.4,
"score_total": 88, // Nota global a ser exibida no Card
"axis_emotional": 95, // Eixo detalhado
"axis_social": 80, // Eixo detalhado
"axis_physical": 75, // Eixo detalhado
"photo": "url_da_foto.jpg",
"answers_json": "{ ... }" // Dados crus para renderizar a UI do Perfil
}
]
}
2. Trigger Manual de Recálculo
/api/matches/recompute/{userId}
O M4TCH.AI não processa os milhares de matches do banco em tempo real na hora do GET, isso travaria o app. O cálculo pesado ocorre em background através deste endpoint de Recompute. Ele varre o banco, executa as equações e salva os resultados em uma tabela cache match_scores para consultas instantâneas depois.
Chame esse endpoint de forma invisível logo após o usuário finalizar o Step 10 do Onboarding ou sempre que ele alterar um filtro forte (ex: mudar o range de idade) na tela de configurações.
{
"ok": true,
"message": "Cálculo concluído",
"matches_processed": 314
}
3. Verificação de Status
/api/profile/check-completion/{userId}
Verifica de forma ultra-rápida se o usuário completou as 10 etapas do Onboarding. Vital para as telas de *Splash* e *AuthScreen* decidirem se o usuário cai na Home ou no Form de perguntas.
Response{ "ok": true, "isComplete": true }