Banco de dados
Estratégia dev/prod
| Ambiente | Driver | Config |
|---|---|---|
| Dev / testes | SQLite via aiosqlite |
Automático — sem DATABASE_URL |
| Produção | PostgreSQL no Neon via asyncpg |
DATABASE_URL=postgresql+asyncpg://... |
O módulo components/galgal/db/db.py detecta o ambiente pela presença de DATABASE_URL no env. Sem ela, usa SQLite em data/galgal.db.
ORM Models (components/galgal/db/models.py)
Todos os models usam SQLAlchemy 2.0 com DeclarativeBase.
| Model | Tabela | Descrição |
|---|---|---|
Tenant |
tenants |
Entidade raiz por corretor. Todo Broker pertence a um Tenant |
Broker |
brokers |
Corretor: nome, slug, brand_color, bio, whatsapp, email |
BrokerProperty |
broker_properties |
M2M entre Broker e Property (um imóvel pode ter múltiplos corretores) |
Property |
properties |
Imóvel: title, slug, type, purpose, price, area, bedrooms, baths, neighborhood, city |
PropertyPhoto |
property_photos |
Fotos do imóvel: url, is_cover, order |
PropertyFeature |
property_features |
Características textuais: "Piscina", "Varanda gourmet", etc. |
Lead |
leads |
Captura de lead: nome, email, telefone, mensagem, vinculado a broker + property |
ScrapedProperty |
scraped_properties |
Imóvel bruto scraped. Status: new → authorized/discarded |
MagicLinkToken |
magic_link_tokens |
Token de auth (UUID, expira em 15 min, uso único) |
Diagrama de relacionamentos
Tenant (1) ──── (N) Broker
│
M──────────── M
│
Property (1) ─── (N) PropertyPhoto
PropertyFeature
│
└── Lead (N)
NocoDB (admin visual)
URL: admin.viacorretor.com.br
Login: admin@viacorretor.com.br
Conectado ao: Neon PostgreSQL (mesma instância de produção)
Permite gerenciar imóveis, corretores e leads via interface visual sem SQL. Útil para o time não-técnico.
Migrações
O projeto usa Alembic para migrações de schema:
# Gerar nova migration
uv run alembic revision --autogenerate -m "descrição"
# Aplicar migrações
uv run alembic upgrade head
# Verificar estado
uv run alembic current
As migrations ficam em components/galgal/db/alembic/versions/.
Seed (dados de desenvolvimento)
uv run python scripts/init_db.py # cria tabelas
uv run python scripts/seed.py # 6 imóveis de amostra + corretor Glauci