padrao-referencias-firestore
Convenção de nomenclatura
Section titled “Convenção de nomenclatura”<colecao>_ref= coleção de referência (modelo/base)<colecao>= coleção com dado real de uso operacional
Exemplos:
class_ref-> referênciaclasses-> dados reaischurch_ref-> referênciachurchs-> dados reais
Regra geral
Section titled “Regra geral”- Coleções
*_refnão são fonte de operação diária. - Coleções sem sufixo
_refsão usadas pela aplicação em produção (dados reais).
Escopo 1: Plataforma (/platform/data_ref)
Section titled “Escopo 1: Plataforma (/platform/data_ref)”Caminho base:
/platform/data_ref
Finalidade:
- armazenar apenas modelos de referência globais da plataforma;
- não armazenar dados operacionais de tenant/igreja.
Regra:
- tudo dentro de
/platform/data_refexiste para servir de base e padronização para os tenants.
Escopo 2: Ministério (/platform/ministrys/{ministryId}/data)
Section titled “Escopo 2: Ministério (/platform/ministrys/{ministryId}/data)”Caminho base:
/platform/ministrys/{ministryId}/data
Finalidade:
- armazenar coleções reais do ministério (uso direto da operação do tenant).
Regra principal:
- as coleções operacionais do ministério não usam
_ref.
Exemplos:
churchsclassesusersmessagesebds
Referências internas do ministério
Section titled “Referências internas do ministério”Um ministério pode ter coleções *_ref em seu próprio data quando precisar manter referências para suas igrejas.
Exemplo de uso válido:
/platform/ministrys/{ministryId}/data/class_ref
Quando usar:
- referência específica do tenant;
- modelo que será replicado/derivado para as igrejas daquele ministério.
Quando não usar:
- para dado operacional diário;
- para informação que deve existir apenas como coleção real.
Relação entre plataforma e ministério
Section titled “Relação entre plataforma e ministério”- Plataforma define base em
/platform/data_ref. - Ministério usa coleções reais em
/platform/ministrys/{ministryId}/data. - Ministério pode manter
*_reflocal apenas como referência para suas igrejas.
Relação com classes de domínio
Section titled “Relação com classes de domínio”Para alinhar banco e código, adotar mapeamento 1:1 entre tipo de coleção e tipo de classe:
- Coleção
*_ref-> classe de domínio*Ref. - Coleção sem
_ref-> classe operacional (sem sufixo).
Exemplos:
church_ref->ChurchRefclass_ref->ClassGroupRefebd_ref->EbdRefebds->EbdSession
Decisão oficial:
docs/architecture/adrs/adr-0025-padrao-de-classes-de-referencia-no-dominio.md
Detalhamento técnico:
docs/architecture/tdd/data-model/tdd-objetos-de-referencia.md
Regras de construção futura
Section titled “Regras de construção futura”Ao criar nova estrutura:
- Definir se é referência ou dado real.
- Se referência global, criar em
/platform/data_ref/<colecao>_ref. - Se operacional do tenant, criar em
/platform/ministrys/{ministryId}/data/<colecao>. - Se referência interna do tenant para igrejas, criar em
/platform/ministrys/{ministryId}/data/<colecao>_ref. - Evitar duplicar sem necessidade (referência e operacional com mesmo conteúdo permanente).
Checklist obrigatório por feature:
- Existe coleção
*_refpara este objeto? - Se sim, a classe
*Reffoi criada/atualizada no domínio? - Existe classe operacional separada para dado real?
- Mapeadores Firestore foram implementados só em infrastructure?
- Foi evitado acoplamento de regra de negócio na presentation?
Checklist rápido
Section titled “Checklist rápido”- O nome da coleção segue a convenção
_ref? - A coleção está no escopo correto (plataforma vs ministério)?
- É modelo (referência) ou uso real (operação)?
- Está claro quem consome essa coleção (plataforma, ministério, igreja)?
Observação
Section titled “Observação”Este padrão baliza a evolução do modelo de dados. Qualquer exceção deve ser registrada em ADR ou documento técnico de decisão.