falta so o chat

This commit is contained in:
2026-04-22 12:41:12 +01:00
parent 96d1985998
commit 2f3b03fe05
444 changed files with 22203 additions and 20079 deletions

107
docs/09_Autenticacao.md Normal file
View File

@@ -0,0 +1,107 @@
# 🔐 Autenticação — Login e Registo
> **Pasta:** `app/src/main/java/com/example/medcuida/pro/ui/auth/`
---
## LoginActivity.java (154 linhas)
> **Layout:** `activity_login.xml`
### Descrição
Ecrã de **entrada na aplicação**. Permite login com email/password via Firebase Auth.
### Inicialização (`onCreate`) — Linhas 3478
1. **Auto-login:** Se já existe sessão ativa → redireciona direto para `MainActivity`
2. **Campos:** email e password (`TextInputEditText`)
3. **Botão "Entrar"**`attemptLogin()`
4. **Link "Registar"** → abre `RegisterActivity`
5. **Link "Esqueci password":**
- Valida se o email foi preenchido
- Envia email de recuperação via `mAuth.sendPasswordResetEmail()`
### `attemptLogin()` — Linhas 8198
Validações antes de enviar ao Firebase:
- Email não pode estar vazio
- Password não pode estar vazia
### `loginUser()` — Linhas 100123
```java
mAuth.signInWithEmailAndPassword(email, password)
```
1. Desativa o botão (evita duplo clique) e mostra "A entrar..."
2. Se login OK → chama `checkUserAccess()`
3. Se falhar → mostra mensagem de erro e reativa o botão
### `checkUserAccess()` — Linhas 125152
**Verifica se o utilizador tem perfil configurado** (estratégia com fallback):
```
1º → Procura em 'medicos' → Se existe → Entrar na app
2º → Procura em 'utilizadores' → Se existe → Entrar na app
3º → Não encontrado → Erro + signOut
```
Se não encontrar em nenhuma coleção → faz `signOut()` e pede para registar.
---
## RegisterActivity.java (187 linhas)
> **Layout:** `activity_register_medico.xml`
### Descrição
Ecrã de **registo de novos médicos**. Cria conta no Firebase Auth e guarda dados no Firestore.
### Campos do Formulário
| Campo | Tipo | Obrigatório | Validação |
|---|---|---|---|
| Nome completo | `TextInputEditText` | ✅ | Não vazio |
| Especialidade | `TextInputEditText` | ✅ | Não vazio |
| Género | `AutoCompleteTextView` | ✅ | Não vazio |
| Email | `TextInputEditText` | ✅ | Não vazio |
| Password | `TextInputEditText` | ✅ | Mínimo 6 caracteres |
### `attemptRegister()` — Linhas 75118
Valida todos os campos sequencialmente. Se algum falhar, faz `requestFocus()` nesse campo.
### `registerUser()` — Linhas 121155
```java
mAuth.createUserWithEmailAndPassword(email, password)
```
1. Desativa o botão de registo
2. Se criar conta OK → chama `saveMedicoData()`
3. **Caso especial — email já existe:**
- Tenta fazer login com as credenciais fornecidas
- Se login OK → grava os dados (pode ter falhado antes)
- Se login falhar → mostra erro "email já registado"
### `saveMedicoData()` — Linhas 157185
Grava os dados do médico em **duas coleções** para compatibilidade:
```java
Map<String, Object> medicoMap = new HashMap<>();
medicoMap.put("id", uid);
medicoMap.put("nome_completo", name);
medicoMap.put("email", email);
medicoMap.put("especialidade", specialty);
medicoMap.put("sexo", gender);
medicoMap.put("tipo", "medico");
```
| Coleção | Documento |
|---|---|
| `utilizadores/{uid}` | Dados principais |
| `medicos/{uid}` | Cópia para compatibilidade |
Após gravar com sucesso → redireciona para `MainActivity`.