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
/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.
{
"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)
/api/profile/update-json
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.
{
"user_id": 42,
"key": "s10_hide_online",
"value": true
}
{
"ok": true,
"message": "Campo atualizado"
}
3. Galeria Drag & Drop
/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.
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)
/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.
/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.