Banco de dados individual e isolamento de dados
Na Vupi, cada projeto possui total soberania sobre seus dados. Ao criar um novo projeto na IDE, a plataforma reserva um nome de database exclusivo, provisiona o banco (PostgreSQL ou MySQL) e cria um usuário com permissões restritas unicamente àquele database.
Injeção automática de credenciais (Zero segredos no código)
O desenvolvedor não precisa criar arquivos .env com senhas de banco nem colar credenciais no código-fonte. A Vupi injeta as variáveis de ambiente diretamente na memória do processo do container:
DATABASE_URL: String de conexão completa pronta para drivers modernos (ex:postgres://user:pass@host:5432/dbname).DB_HOST,DB_PORT,DB_NOME,DB_USUARIO,DB_SENHA: Parâmetros individuais para frameworks e pools customizados.- Aliases para ferramentas de migrations:
FLYWAY_URL,LIQUIBASE_COMMAND_URL,PGHOST,MYSQL_HOST.
Estruturação de Migrations e Seeders
As migrations gerenciam a evolução do schema do banco de forma versionada e rastreável. Devem ser nomeadas cronologicamente (ex: 001_criar_produtos.sql) e salvas no diretório de migrations da aplicação.
Exemplo de Migration Idempotente (`Database/Migrations/001_criar_produtos.sql`):
-- Criação segura de tabela com chaves UUID e restrições
CREATE TABLE IF NOT EXISTS produtos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
nome VARCHAR(150) NOT NULL,
preco_centavos INTEGER NOT NULL CHECK (preco_centavos >= 0),
ativo BOOLEAN NOT NULL DEFAULT TRUE,
criado_em TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_produtos_ativos ON produtos (ativo, criado_em DESC);
Exemplo de Seeder Idempotente (`Database/Seeders/001_seed_produtos.sql`):
-- Seeders devem ser seguros contra reexecução repetida
INSERT INTO produtos (id, nome, preco_centavos, ativo)
VALUES ('00000000-0000-4000-8000-000000000001', 'Produto Demonstrativo', 1990, TRUE)
ON CONFLICT (id) DO NOTHING;
Diretrizes de integridade e segurança
- Prepared Statements obrigatórios: Nunca concatene variáveis de entrada diretamente em queries SQL; utilize bind de parâmetros.
- Isolamento estrito: O usuário de banco do projeto não possui permissão de leitura ou escrita em outros bancos vizinhos.
- Migrations reversíveis: Sempre que possível, planeje instruções de rollback para desfazer alterações com segurança.
- Visualização EER: A IDE oferece inspeção visual de schema e relacionamentos em tempo real pelo painel de banco de dados.