M4TCH.AI

M4TCH.AI

API Reference

Onboarding de Perfil

Esta seção documenta a construção da identidade do usuário no app através de um Wizard de 10 passos. A Inteligência Artificial depende das respostas coletadas aqui (salvas no objeto answers_json) para calcular as porcentagens de compatibilidade e sugerir conexões de alta fidelidade.

Diretrizes de Frontend (Padrão Mariana)

Ao implementar o fluxo de Onboarding no WelcomeDisplayModeScreen.tsx, siga as regras de UX para manter o padrão Premium:

  • Avanço Automático: Em botões de seleção única (ex: Gênero), implemente um setTimeout de 300ms para disparar a função goNext() automaticamente. Evite o "toque duplo" desnecessário do usuário.
  • Estética Clean: Esqueça blocos (cards) pesados. Separe as seções como "Álbum de Fotos" e "Dados Básicos" usando a StyleSheet.hairlineWidth.
  • Barra de Progresso: Utilize a barra ultra fina superior (height: 4) sem bordas.

1. Recuperação de Respostas (Draft)

GET /api/profile/get-profile/{userId}

Se o usuário fechar o app no passo 5, ele não deve começar do zero. Este endpoint recupera o objeto answers_json atual para pré-preencher os estados do formulário.

Response (200 OK)
{
  "ok": true,
  "id": 42,
  "answers_json": {
    "s1_name": "Maurício",
    "s2_gender": "masculino",
    "s3_intent": "romance"
  }
}

2. Update Inteligente (Steps 1 ao 9)

PUT /api/profile/update-json
Atualização Parcial (Merge Dinâmico)

No frontend, ao avançar um passo, envie apenas as respostas da tela atual. O backend não subscreve o banco inteiro, ele faz um merge adicionando ou atualizando apenas as chaves enviadas dentro do JSON existente.

Request Body
{
  "userId": 42,
  "key": "s5_mbti",
  "value": "INTJ"
}
Response (200 OK)
{
  "ok": true,
  "message": "Campo atualizado com sucesso no JSON!"
}

3. O "Gran Finale" (Step 10)

O passo 10 do app consolida tudo. É responsável por enviar as fotos (Multipart), salvar o GPS, definir os dados básicos faltantes e acionar o algoritmo de IA para pré-calcular os matches.

POST /api/upload/upload-photos

Envia o álbum de fotos capturado no expo-image-picker. Requer multipart/form-data.

Request (FormData)
images: [{ uri: "file://...", name: "foto_0.jpg", type: "image/jpeg" }, ...]
Response
{ "imageUrls": ["https://cdn.../foto1.jpg", "https://cdn.../foto2.jpg"] }
POST /api/profile/match-profile

Finaliza e crava os dados vitais em colunas nativas no banco (para busca rápida da IA) e envia o JSON completo atualizado.

Request Body
{
  "userId": 42,
  "birth_date": "2000-10-15",
  "lat": -22.9068,
  "lng": -43.1729,
  "answers": {
    "s10_photos": ["url1", "url2"],
    "s10_profile_pic": "url1",
    "s10_cep": "00000000",
    "s10_wa": "11999999999",
    "s10_ig": "mauricix",
    ...
  }
}
POST /api/matches/recompute/{userId}
Disparo do Algoritmo de Compatibilidade

Assim que o Step 10 termina, esta rota é chamada no background. Ela compara o novo usuário com até 100 perfis próximos usando a CompatibilityEngine e já gera a tabela de match_scores para a tela inicial abrir com os cards carregados.