falta so o chat
This commit is contained in:
107
docs/09_Autenticacao.md
Normal file
107
docs/09_Autenticacao.md
Normal 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 34–78
|
||||
|
||||
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 81–98
|
||||
|
||||
Validações antes de enviar ao Firebase:
|
||||
- Email não pode estar vazio
|
||||
- Password não pode estar vazia
|
||||
|
||||
### `loginUser()` — Linhas 100–123
|
||||
|
||||
```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 125–152
|
||||
|
||||
**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 75–118
|
||||
|
||||
Valida todos os campos sequencialmente. Se algum falhar, faz `requestFocus()` nesse campo.
|
||||
|
||||
### `registerUser()` — Linhas 121–155
|
||||
|
||||
```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 157–185
|
||||
|
||||
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`.
|
||||
Reference in New Issue
Block a user