4.2 KiB
4.2 KiB
DuOrigin v2 - Prisma Database Layer
Este diretório contém o schema Prisma e scripts de seed para o DuOrigin v2.
📁 Estrutura
prisma/
├── schema.prisma # Schema do banco de dados
├── seed.ts # Script de seed com dados demo
└── README.md # Esta documentação
🗄️ Modelos de Dados
| Modelo | Descrição | Tabela |
|---|---|---|
User |
Usuários do sistema (autenticação) | users |
Company |
Empresas/operadores EUDR | companies |
Producer |
Produtores rurais | producers |
Area |
Propriedades/glebas com geolocalização | areas |
Product |
Commodities EUDR (soja, café, etc.) | products |
Lot |
Lotes de produto para rastreabilidade | lots |
DdsStatement |
Declarações de Due Diligence | dds_statements |
AuditLog |
Trilha de auditoria | audit_logs |
🔗 Relacionamentos
Company
└── Producer (1:N)
├── Area (1:N)
│ └── Lot (1:N)
└── Lot (1:N)
Product
└── Lot (1:N)
Company
└── DdsStatement (1:N)
└── lot_ids (JSON array)
User
└── AuditLog (1:N)
🚀 Setup
1. Configurar Variável de Ambiente
Crie ou edite .env na raiz do projeto:
# Via túnel SSH (recomendado para dev local)
DATABASE_URL="postgresql://duorigin:DuOrigin2026!@localhost:5433/duorigin"
# Conexão direta (se PostgreSQL aceitar conexões externas)
# DATABASE_URL="postgresql://duorigin:DuOrigin2026!@198.199.84.130:5432/duorigin"
1.1 Criar Túnel SSH (se necessário)
Se o PostgreSQL não aceita conexões externas, crie um túnel SSH:
# Criar túnel (porta local 5433 -> servidor 5432)
ssh -i ~/.ssh/digitalocean_jarvis -L 5433:localhost:5432 -fN root@198.199.84.130
# Verificar se túnel está ativo
ss -tlnp | grep 5433
# Matar túnel quando terminar
pkill -f "ssh.*5433.*5432"
2. Gerar Prisma Client
npx prisma generate
3. Aplicar Schema (se banco novo)
# Criar migration inicial
npx prisma migrate dev --name init
# Ou sincronizar sem migration (dev)
npx prisma db push
4. Popular com Dados Demo
npx prisma db seed
📊 Dados de Demonstração
O seed cria os seguintes dados:
Usuários
| Senha | Role | |
|---|---|---|
| demo@duorigin.com | DuoDemo2026 | admin |
| operador@duorigin.com | DuoDemo2026 | operator |
Empresas (3)
- AgroCerrado Exportações Ltda (GO)
- Fazendas Unidas do Brasil S.A. (MT)
- Cooperativa Agrícola Planalto Central (MG)
Produtores (5)
Produtores rurais vinculados às empresas, com CAR válido.
Áreas (5)
Propriedades rurais no Cerrado com coordenadas reais:
- 3 áreas com risco baixo (sem desmatamento)
- 1 área com risco médio (alerta)
- 1 área com risco alto (desmatamento confirmado)
Lotes (10)
Lotes de soja e café em diferentes status:
- 4 aprovados
- 2 em revisão
- 2 rejeitados
- 2 pendentes
Declarações DDS (5)
Due Diligence Statements em vários status:
- 2 aprovadas (com EU reference)
- 1 submetida (aguardando)
- 1 rejeitada
- 1 rascunho
🛠️ Comandos Úteis
# Abrir Prisma Studio (GUI)
npx prisma studio
# Resetar banco e re-seed
npx prisma migrate reset
# Verificar schema
npx prisma validate
# Formatar schema
npx prisma format
# Gerar diagrama ERD
npx prisma-erd-generator
📦 Uso no Código
import { prisma } from '@/lib/prisma';
// Buscar todos os lotes com risco alto
const highRiskLots = await prisma.lot.findMany({
where: { risk_score: { gte: 70 } },
include: {
area: true,
producer: true,
product: true,
},
});
// Buscar empresa com produtores e áreas
const company = await prisma.company.findUnique({
where: { id: 1 },
include: {
producers: {
include: { areas: true },
},
},
});
🔒 Segurança
- Nunca commitar
.envcom credenciais reais - Em produção, usar SSL:
?sslmode=require - Sempre usar prepared statements (Prisma faz isso automaticamente)
📝 Notas
- O campo
lot_idsemDdsStatementé um JSON array de IDs - O campo
geojsonemAreaarmazena polígonos GeoJSON - Timestamps são
DateTime?para compatibilidade com banco existente - Passwords são hasheados com bcrypt (salt rounds: 10)