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

136
docs/02_AgendaActivity.md Normal file
View File

@@ -0,0 +1,136 @@
# 📅 AgendaActivity.java — Ecrã de Agenda
> **Ficheiro:** `app/src/main/java/com/example/medcuida/pro/AgendaActivity.java`
> **Layout:** `activity_agenda.xml`
> **Linhas de código:** 192
---
## Descrição Geral
A `AgendaActivity` é um **ecrã dedicado à gestão da agenda do médico**. Mostra um calendário interativo e, abaixo dele, a lista de consultas para o dia selecionado.
> ⚠️ Esta Activity funciona de forma **semelhante à tab Agenda do MainActivity**, mas é uma Activity separada, acessível a partir de outras partes da app.
---
## Inicialização (`onCreate`) — Linhas 3693
### 1. Configuração dos Componentes (Linhas 4348)
```java
CalendarView calendarView = findViewById(R.id.calendarView);
recyclerAgenda = findViewById(R.id.recycler_agenda);
textAgendaVazia = findViewById(R.id.text_agenda_vazia);
```
- `CalendarView` → Calendário nativo do Android
- `RecyclerView` → Lista das consultas
- `TextView` → Mensagem quando não há consultas
### 2. Bottom Navigation (Linhas 4962)
```java
bottomNav.setSelectedItemId(R.id.nav_agenda);
```
- Marca a tab "Agenda" como ativa
- Navegação para `MainActivity` (Pacientes) e `PerfilMedicoActivity` (Perfil)
### 3. Configuração do Adapter (Linhas 6480)
```java
adapter = new ConsultaAdapter(
new ConsultaAdapter.OnConsultaActionClickListener() {
void onAceitarClick(Consulta consulta) { aceitarConsulta(consulta); }
void onEliminarClick(Consulta consulta) { eliminarConsulta(consulta); }
},
consulta -> { /* abrir detalhes */ }
);
```
- Implementa dois callbacks:
- **Aceitar** → muda o status para `"aceite"`
- **Eliminar** → remove a consulta do Firestore
- Clique no item → abre `DetalhePacienteActivity`
### 4. Carregamento Inicial (Linhas 8293)
```java
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
loadConsultasForDate(sdf.format(new Date()));
```
- Obtém o UID do médico autenticado
- Carrega as consultas de **hoje**
- Configura o listener do calendário para mudar de dia
---
## Carregamento de Consultas — Linhas 96153
### `loadConsultasForDate(String dateStr)`
**Passo a passo:**
1. **Remove o listener anterior** para evitar fugas de memória
2. **Escuta em tempo real** toda a coleção `consultas`
3. Para cada documento:
- Converte para `Consulta`
- **Verifica se pertence ao médico:**
```java
Object med = c.getMedicos();
if (med instanceof String) { ... }
else if (med instanceof List) { ... }
```
- **Filtra por data** (suporta 3 formatos diferentes)
- **Exclui consultas canceladas**
4. Atualiza o adapter e mostra/esconde a mensagem "vazia"
---
## Ações nas Consultas — Linhas 155171
### `aceitarConsulta(Consulta)`
```java
db.collection("consultas").document(consulta.getId())
.update("status", "aceite")
```
- Atualiza o status para `"aceite"` no Firestore
- Mostra toast de sucesso ou erro
### `eliminarConsulta(Consulta)`
```java
db.collection("consultas").document(consulta.getId())
.delete()
```
- **Apaga permanentemente** a consulta do Firestore
- Mostra toast de sucesso ou erro
---
## Métodos Auxiliares de Data — Linhas 173190
### `convertToISODate(String ddMMyyyy)`
| Entrada | Saída |
|---|---|
| `"22/04/2026"` | `"2026-04-22"` |
### `getAlternativeDate(String paddedDate)`
| Entrada | Saída |
|---|---|
| `"01/04/2026"` | `"1/4/2026"` |
> Estes métodos existem porque os dados no Firestore podem ter formatos de data inconsistentes.
---
## Diagrama de Fluxo
```mermaid
graph TD
A[onCreate] --> B[Configurar CalendarView]
A --> C[Configurar RecyclerView]
A --> D[Carregar consultas de hoje]
B -->|Mudar data| E[loadConsultasForDate]
E --> F{Consultas encontradas?}
F -->|Sim| G[Mostrar lista]
F -->|Não| H[Mostrar 'Sem consultas']
G -->|Aceitar| I[Atualizar status Firestore]
G -->|Eliminar| J[Apagar do Firestore]
G -->|Clicar| K[Abrir DetalhePaciente]
```