Documentação da API - G3 Life (Firestore)
Esta documentação descreve como sistemas externos podem interagir com os dados dos usuários da plataforma G3 Life usando o Firebase.
Autenticação de API Externa (Backend)
Para sistemas externos (backends) interagirem com os dados de um usuário, eles devem:
- Autenticar-se no Firebase usando uma **Conta de Serviço** (Service Account) com permissões de leitura/escrita no Firestore.
- Usar a **Chave de API** (gerada no painel "Gerenciar Chaves API") para identificar um usuário específico.
Exemplo de Query (Node.js Admin SDK):
Este código de backend demonstra como encontrar um usuário pela sua Chave de API e, em seguida, adicionar um novo dado de saúde (peso) para ele.
// 1. Inicialize o Firebase Admin SDK no seu backend
// const admin = require('firebase-admin');
// admin.initializeApp({ ... });
// const db = admin.firestore();
// 2. Chave de API fornecida pelo seu sistema
const userApiKey = "chave-api-gerada-no-painel-g3-life";
async function addHealthDataByApiKey(apiKey, healthData) {
try {
// 3. Encontre o usuário que possui esta Chave de API
const usersRef = db.collection('users');
const snapshot = await usersRef.where('apiKey', '==', apiKey).limit(1).get();
if (snapshot.empty) {
console.log('Nenhum usuário correspondente à Chave de API.');
return { success: false, error: 'API Key not found' };
}
const userDoc = snapshot.docs[0];
const userId = userDoc.id;
console.log(`Usuário encontrado: ${userId}`);
// 4. Adicione os dados de saúde na subcoleção do usuário
const healthDataRef = db.collection('users').doc(userId).collection('health_data');
await healthDataRef.add(healthData);
console.log('Dados de saúde adicionados com sucesso!');
return { success: true, userId: userId };
} catch (error) {
console.error("Erro ao processar API:", error);
return { success: false, error: error.message };
}
}
// 5. Exemplo de uso
const novoDadoPeso = {
type: 'weight',
value: '78.5', // Vem do seu sistema externo
timestamp: new Date() // admin.firestore.Timestamp.now()
};
addHealthDataByApiKey(userApiKey, novoDadoPeso);
Coleção Principal: `users`
Esta é a coleção central que armazena o perfil de todos os usuários (pacientes e profissionais).
Estrutura do Documento (Ex: `/users/{userId}`):
{
"name": "Nome Completo do Usuário",
"email": "usuario@email.com",
"cpf": "123.456.789-00",
"dob": "1990-01-01",
"userType": "patient" | "doctor" | "nutritionist" | "personal",
"status": "pending" | "approved" | "rejected",
"conselho": "12345-CRM" (Apenas para profissionais),
"isMaster": true (Opcional, apenas para admin),
"apiKey": "a1b2c3d4-..." (Opcional, gerado pelo painel),
"connectedProfessionals": [
"proId1",
"proId2"
] (Apenas para pacientes),
"settings": {
"ai_tracking": ["water", "weight"],
"whatsapp": "+556299999999"
},
"achievements": ["WEIGHT_3_DAYS"]
}
Subcoleções de `users` (Dados do Paciente)
Todos os dados de saúde do paciente são armazenados em subcoleções dentro do seu próprio documento de usuário para segurança e fácil consulta.
1. `/users/{userId}/health_data`
Armazena todos os registros diários de métricas (água, peso, glicemia, etc.).
{
"type": "weight",
"value": "80.5",
"timestamp": "October 25, 2025 at 11:00:00 AM UTC-3",
"userId": "{userId}"
}
2. `/users/{userId}/diet_plans`
Armazena os planos alimentares criados por nutricionistas. O ID do documento é o dia da semana (ex: 'seg', 'ter').
3. `/users/{userId}/workouts`
Armazena os planos de treino criados por Personal Trainers. O ID do documento é o dia da semana (ex: 'seg', 'ter').
4. `/users/{userId}/meal_logs`
Armazena o feedback do paciente sobre as refeições, incluindo as fotos.
5. `/users/{userId}/workout_logs`
Armazena os check-ins de treino do paciente.
6. `/users/{userId}/prescriptions`
Armazena as prescrições médicas.
Coleção Principal: `connections`
Gerencia os convites e as conexões entre pacientes e profissionais.