Referência v3
Voltar à plataforma

Banco de Dados no Módulo

Como configurar conexões, criar migrations e seeders no seu módulo.

Seleção de banco (connection.php)

Cada módulo declara qual banco usa em Database/connection.php:

<?php
// Opções: 'core' | 'modules' | 'auto'
return 'core';
ValorBanco usadoVariáveis .env
'core'Banco principalDB_HOST, DB_NOME, DB_USUARIO, DB_SENHA
'modules'Banco secundárioDB2_HOST, DB2_NOME, DB2_USUARIO, DB2_SENHA
'auto'Detecta automaticamenteUsa DB2 se configurado, senão DB

Migrations

Migrations criam e removem tabelas. Devem ter funções up e down e verificar o driver do banco:

<?php

use PDO;

return [
    'up' => function (PDO $pdo): void {
        $driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
        if ($driver === 'pgsql') {
            $pdo->exec("CREATE TABLE IF NOT EXISTS produtos (
                id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
                nome VARCHAR(255) NOT NULL,
                preco DECIMAL(10,2) NOT NULL DEFAULT 0,
                criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW()
            )");
        } else {
            $pdo->exec("CREATE TABLE IF NOT EXISTS produtos (
                id CHAR(36) PRIMARY KEY,
                nome VARCHAR(255) NOT NULL,
                preco DECIMAL(10,2) NOT NULL DEFAULT 0,
                criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
        }
    },
    'down' => function (PDO $pdo): void {
        $pdo->exec("DROP TABLE IF EXISTS produtos");
    },
];

Seeders

Seeders inserem dados iniciais. São executados automaticamente após o deploy:

<?php

use PDO;

return function (PDO $pdo): void {
    $driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
    $id = $driver === 'pgsql'
        ? $pdo->query('SELECT gen_random_uuid()')->fetchColumn()
        : bin2hex(random_bytes(16));

    $pdo->prepare("INSERT INTO produtos (id, nome, preco) VALUES (?, ?, ?)")
        ->execute([$id, 'Produto Exemplo', 99.90]);
};
Execução automática

Ao publicar o módulo em src/Modules/, as migrations e seeders são executados automaticamente. Ao excluir o projeto, as tabelas são removidas automaticamente via down().

Injeção de PDO no Repository

O container injeta o PDO automaticamente via constructor injection:

final class ProdutoRepository
{
    // PDO é injetado automaticamente pelo container
    public function __construct(private readonly PDO $pdo) {}

    public function findAll(): array
    {
        return $this->pdo
            ->query("SELECT * FROM produtos ORDER BY criado_em DESC")
            ->fetchAll(PDO::FETCH_ASSOC);
    }
}

Banco de Dados Personalizado

A IDE permite configurar uma conexão de banco de dados personalizada para isolar seus módulos de desenvolvimento do banco core da aplicação.

Por que usar?

Isolamento de Dados

Seus módulos não compartilham o mesmo banco que o sistema core. Dados de desenvolvimento ficam separados.

Flexibilidade

Use PostgreSQL enquanto o core usa MySQL (ou vice-versa). Conecte-se a bancos em nuvem (Aiven, AWS RDS, etc.).

Segurança

Credenciais criptografadas com AES-256-CBC. Suporte a SSL/TLS com certificados CA.

Como configurar

1

Acessar a página de projetos

Na página /dashboard/ide, localize o card "Conexão de Banco de Dados".

2

Clicar em "Configurar Banco de Dados"

Preencha os campos obrigatórios:

  • Nome da conexão: Nome amigável (ex: "Meu PostgreSQL Local")
  • Driver: PostgreSQL ou MySQL
  • Nome do banco: Nome do database (ex: meu_banco_dev)
  • Host: Endereço do servidor (ex: localhost ou pg-xxx.aivencloud.com)
  • Porta: Porta do banco (ex: 5432 para PostgreSQL, 3306 para MySQL)
  • Usuário: Nome de usuário do banco
  • Senha: Senha do banco de dados
3

Configurar SSL (opcional)

Para conexões em produção ou com bancos em nuvem:

  • Modo SSL: Nenhum, Require, Verify CA ou Verify Full
  • Certificado CA: Cole o conteúdo do arquivo .pem (necessário para Verify CA/Full)
4

Testar e Conectar

Clique em "Testar Conexão" para validar. Se bem-sucedido, clique em "Conectar" para salvar.

Exemplo: PostgreSQL no Aiven

Nome da conexão: Aiven PostgreSQL
Driver: PostgreSQL
Nome do banco: defaultdb
Host: pg-xxx-yyy.aivencloud.com
Porta: 12345
Usuário: avnadmin
Senha: sua_senha_aiven
Modo SSL: Require
Certificado CA: (cole o conteúdo do ca.pem fornecido pelo Aiven)

Comportamento do sistema

Tipo de MóduloBanco Usado
Nativos (Auth, Usuario, etc.)Banco Core (DB_*)
Desenvolvedor (seus módulos)Banco Personalizado (se configurado)
Conexões Persistentes

O sistema usa conexões persistentes (PDO::ATTR_PERSISTENT) para melhor performance. Primeira requisição: ~3500ms (estabelece conexão). Requisições subsequentes: ~50-200ms (reutiliza conexão) — 95% mais rápido!

Gerenciamento

No card de banco de dados, você pode:

  • Ver/Ocultar dados: Clique no ícone de olho para mostrar/ocultar host, porta e nome do banco
  • Ver migrations pendentes: Número de migrations que ainda não foram executadas
  • Ver tabelas: Lista de todas as tabelas criadas no banco personalizado
  • Editar conexão: Modifique as configurações (senha é mantida se deixar vazio)
  • Excluir conexão: Remove a configuração (seus módulos voltam a usar o banco core)
Importante

Ao excluir a conexão, seus módulos voltarão a usar o banco de dados padrão da Vupi.us API. As tabelas e dados no banco personalizado não serão afetados.

Segurança

  • Criptografia: Senhas são criptografadas com AES-256-CBC antes de serem armazenadas
  • SSL/TLS: Suporte completo a conexões seguras com verificação de certificado
  • Isolamento: Cada usuário tem sua própria configuração de conexão

Para mais detalhes, consulte a documentação completa de configuração de banco de dados personalizado.