Data Model — Mensagens
Contexto
Section titled “Contexto”Modelo de dados da coleção dedicada de mensagens, conforme ADR-0023 — Coleção Dedicada de Mensagens.
Coleção
Section titled “Coleção”Caminho: platform/ministrys/{ministryId}/data/messages/{messageId} (coleção por tenant).
Um documento por mensagem.
Entidade Message
Section titled “Entidade Message”| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Identificador único da mensagem (ex.: auto-ID do Firestore) |
receiverId | string | Sim | UID do usuário destinatário |
emitterId | string | Sim | UID do emissor (usuário ou sistema) |
emitterName | string | Não | Nome do emissor para exibição |
emitterEmail | string | Não | Email do emissor |
emittedAt | string (ISO 8601) | Sim | Data/hora de envio |
title | string | Sim | Título da mensagem |
body | string | Não | Corpo/conteúdo da mensagem |
type | string | Sim | Tipo: SYSTEM, PERSONAL, GROUP, PUBLIC, etc. |
readStatus | string | Sim | Status de leitura: UNREAD, READ, IGNORED |
priority | string | Sim | Prioridade: LOW, NORMAL, HIGH, URGENT (ordem de destaque: URGENT > HIGH > NORMAL > LOW) |
ministryId | string | Sim | Escopo tenant (ministério) |
unitId | string | Não | Unidade organizacional quando aplicável |
deletedAt | string (ISO 8601) | Não | Preenchido quando receptor exclui (soft delete) |
Ações do receptor
Section titled “Ações do receptor”As ações do receptor (excluir, marcar como lida, ignorar) são refletidas nos campos:
- Excluir:
deletedAtpreenchido; documento pode ser filtrado da lista ou removido - Marcar como lida:
readStatus=READ - Ignorar:
readStatus=IGNORED
Índices Firestore (sugeridos)
Section titled “Índices Firestore (sugeridos)”Para suportar o listener em tempo real e queries:
| Coleção | Campos | Uso |
|---|---|---|
platform/.../messages | receiverId ASC, deletedAt ASC, priority ASC, emittedAt DESC | Listar mensagens do destinatário, excluídas filtradas, ordenadas por prioridade e data |
Mensagens públicas (broadcast)
Section titled “Mensagens públicas (broadcast)”Para mensagens visíveis a todos no ministério (ex.: aviso de horário da EBD, boas-vindas), use receiverId: "*".
O listener do frontend consulta receiverId in [emailDoUsuario, "*"] quando logado, ou receiverId == "*" quando não logado (parte pública da aba Início).
Relacionamentos
Section titled “Relacionamentos”- receiverId → email do destinatário ou
"*"para broadcast público - emitterId →
platform/users/{uid}ou identificador de sistema - ministryId → escopo multitenancy (ADR-0012)
Referências
Section titled “Referências”| Tipo | Documento |
|---|---|
| ADR | ADR-0023 — Coleção Dedicada de Mensagens |
| TDD | TDD API Mensagens |