Design Spec: Persistence Layer with Beanie ODM
Data: 2026-04-18 Status: Approved Tópico: Implementação da camada de persistência usando Beanie (MongoDB) mantendo o domínio puro.
1. Objetivo
Estabelecer como os dados serão persistidos no MongoDB, garantindo que as entidades de domínio permaneçam agnósticas à tecnologia de banco de dados, utilizando o Beanie como ODM para facilitar o mapeamento e validação via Pydantic.
2. Arquitetura
2.1 Separação de Responsabilidades
- Domain (
src/amon_claw/domain/entities/): Contém apenas classesBaseModeldo Pydantic. Nenhuma dependência do Beanie ou Motor. - Infrastructure (
src/amon_claw/infrastructure/database/mongodb/models/): Contém as classesDocumentdo Beanie. Elas herdarão das entidades de domínio e dobeanie.Document. - Infrastructure (
src/amon_claw/infrastructure/database/mongodb/repositories/): Implementações dos repositórios que encapsulam a lógica de persistência e retornam entidades de domínio.
2.2 Estrutura de Documentos
Os documentos serão definidos usando Herança Múltipla para evitar duplicação de campos:
from beanie import Document
from amon_claw.domain.entities.tenant import Tenant
class TenantDocument(Document, Tenant):
class Settings:
name = "tenants"
indexes = ["phone"]
3. Entidades e Índices
| Coleção | Entidade de Domínio | Índices | Notas |
|---|---|---|---|
tenants |
Tenant |
phone (Unique) |
Identificador principal do bot |
professionals |
Professional |
tenant_id |
Filtro por negócio |
services |
Service |
tenant_id |
Catálogo por negócio |
customers |
Customer |
[tenant_id, phone] (Unique) |
Cliente único por estabelecimento |
appointments |
Appointment |
[tenant_id, start_time], professional_id |
Busca de agenda e disponibilidade |
4. Inicialização
A conexão será gerida por uma função init_db que:
1. Obtém a URI do MongoDB via Settings.
2. Cria o cliente assíncrono Motor.
3. Registra todos os Document models no Beanie.
5. Próximos Passos
- Implementar
src/amon_claw/infrastructure/database/mongodb/models/. - Configurar o cliente e inicialização em
src/amon_claw/infrastructure/database/mongodb/client.py. - Criar os repositórios básicos para cada entidade.