M4TCH.AI

M4TCH.AI

User Data Management

Gestão de Perfil

Esta tela (ProfileDetailsScreen.tsx) centraliza a edição de dados dinâmicos (Merge parcial), upload da galeria de fotos, vinculação de integrações externas (Spotify/Instagram) e ações vitais de gerenciamento da conta.

1. Resgatar Perfil Completo

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

Sempre que a tela ganha foco (via navigation.addListener), este endpoint recarrega o objeto answers_json. Ele preenche a bio, interesses, fotos de perfil (até 7 slots) e as flags de visibilidade online e de localização.

Response (200 OK)
{
  "id": 42,
  "answers_json": {
    "s10_name": "Isabella",
    "s10_photos": ["url_img1", "url_img2"],
    "s9_interests": ["Academia", "Cinema"],
    "s10_hide_location": false,
    "s10_hide_online": true
  }
}

2. Atualização Dinâmica (Merge API)

PUT /api/profile/update-json
Eficiência no Frontend

O app executa inúmeras requisições PUT para esse endpoint (ex: ao ligar/desligar o "Status Oculto" ou editar a Bio). O backend realiza um merge cirúrgico da chave enviada dentro da coluna JSON, preservando o resto dos dados.

Request Body (Ex: Ocultar Online)
{
  "user_id": 42,
  "key": "s10_hide_online",
  "value": true
}
Response (200 OK)
{
  "ok": true,
  "message": "Campo atualizado"
}

3. Galeria Drag & Drop

POST /api/upload/upload-photos

O usuário pode arrastar para reordenar a galeria (usando react-native-draggable-flatlist). As fotos novas enviadas como multipart/form-data retornam a URL final da CDN, e depois a matriz completa é salva via update-json na chave s10_photos.

4. Integrações OAuth (Spotify & Instagram)

Utilizamos o expo-web-browser para disparar as rotas de callback externas.

Spotify

Pede escopo user-top-read para importar a música preferida e inserir a capa e o título do artista no perfil.

Instagram

Pede escopo user_media para baixar as últimas fotos do feed da API Graph do Instagram e salva os links no JSON.

5. Zonas de Perigo (Danger Zone)

PUT /api/profile/freeze-account

Muda o status da conta para congelada (Inativa). O usuário não aparece mais no Matchmaking da IA, mas suas conversas passadas ficam salvas. Ao finalizar, o app reseta o estado para a tela de Login.

DELETE /api/profile/delete-account

Ação destrutiva exigida pelas diretrizes da Apple. Apaga fisicamente os registros do usuário e desvincula os tokens OAuth de terceiros. Requer confirmação através do modal de aviso.