M4TCH.AI

M4TCH.AI

Algorithm Logic & API

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:

Peso: 50%

Eixo Emocional

Calculado através do cruzamento de Traços de Personalidade (Qualidades/Defeitos) e Interesses/Hobbies. A maior carga da nota.

Peso: 25%

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).

Peso: 25%

Eixo Físico

Preferências de aparência física cruzadas e Decaimento Linear matemático baseado na diferença de idade exigida.

Gate de Segurança (Filtro Zero)

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

GET /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.

Response (200 OK)
{
  "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

POST /api/matches/recompute/{userId}
Performance Híbrida

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.

Quando acionar? (Frontend)

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.

Response (200 OK)
{
  "ok": true,
  "message": "Cálculo concluído",
  "matches_processed": 314
}

3. Verificação de Status

GET /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 }