Platform Management

March 19, 2025 · View on GitHub

Sistema de gerenciamento de plataformas, sistemas, aplicações, microserviços, bancos de dados e APIs.

Funcionalidades

  • Cadastro e gerenciamento de sistemas
  • Cadastro e gerenciamento de aplicações
  • Cadastro e gerenciamento de microserviços
  • Cadastro e gerenciamento de bancos de dados
  • Cadastro e gerenciamento de APIs
  • Relatórios de testes
  • Integração com SQLite MCP Server para Cursor

Requisitos

  • Node.js (v20+)
  • npm (v10+)
  • Docker (para SQLite MCP Server)

Instalação

# Clonar o repositório
git clone https://github.com/seu-usuario/platform-management.git

# Navegar para o diretório
cd platform-management

# Instalar dependências
npm install

# Opcional: Construir e iniciar o SQLite MCP Server (requer Docker)
cd .docker
docker-compose build
docker-compose up -d

Configuração

O sistema utiliza arquivos .env para configuração de ambiente:

  • .env.dev - Configuração de desenvolvimento
  • .env.test - Configuração de testes
  • .env - Configuração de produção

Variáveis de ambiente principais

# Configurações básicas
NODE_ENV=development|test|production
SERVER_PORT=3000

# Banco de dados
DB_TYPE=sqlite
DB_FILE=caminho/para/banco.sqlite
DB_PERMISSIONS=777

# Locale
DEFAULT_LOCALE=pt-BR
AVAILABLE_LOCALES=pt-BR,en-US

Execução

Modo Desenvolvimento

Inicia o servidor usando as variáveis do .env.dev, com hot-reload ativado.

npm run dev:server
# ou
npm run start:dev

Modo Teste

Inicia o servidor usando as variáveis do .env.test e utiliza o banco de dados de testes.

npm run test:server
# ou
npm run start:test # Este comando executa os testes automaticamente antes de iniciar o servidor

Modo Produção

Inicia o servidor usando as variáveis do .env, com otimizações de produção.

npm run prod:server
# ou
npm run start:prod # Este comando executa os testes automaticamente antes de iniciar o servidor

Testes

Para executar os testes, utilize os seguintes comandos:

# Executa testes unitários
npm test

# Executa testes unitários com cobertura
npm run test:cov

# Executa testes end-to-end
npm run test:e2e

# Executa testes end-to-end em ambiente de CI com variáveis específicas
npm run test:e2e:ci

Os relatórios de testes são gerados no diretório public/reports:

  • Relatório JUnit: public/reports/junit.xml
  • Relatório HTML: public/reports/test-report.html
  • Relatórios de cobertura: public/reports/coverage/

Configuração de Testes

Todos os parâmetros de teste estão centralizados no arquivo test/jest-e2e.json, incluindo:

  • Diretórios para relatórios
  • Timeout para testes
  • Configurações do ambiente de teste

O arquivo .env.test contém apenas as configurações necessárias que não podem ser definidas no jest-e2e.json, como o caminho do banco de dados de teste (DB_FILE).

Importante: Localização dos Relatórios

Todos os relatórios de testes e cobertura devem ser gerados no diretório public/reports/. Não utilize o diretório test/public/ para armazenar relatórios.

Documentação

  • Guia de Testes - Documentação completa sobre como executar e entender os testes automatizados

Gerenciamento do Banco de Dados

O banco de dados é gerenciado manualmente através de arquivos SQL. Não utilizamos migrations do TypeORM para modificar a estrutura do banco.

Fluxo de Trabalho

  1. Todas as alterações no banco de dados devem ser feitas manualmente via arquivos SQL
  2. Os arquivos SQL devem ser executados usando um cliente SQL ou via linha de comando
  3. Após qualquer alteração no banco, regenere as entidades TypeORM usando:
npm run entities:generate

Comandos Disponíveis

  • npm run db:init - Inicializa o banco de dados para o ambiente atual
  • npm run db:verify - Verifica se o banco de dados está configurado corretamente
  • npm run entities:generate - Gera as entidades TypeORM a partir do banco de dados atual

Ambientes

  • Desenvolvimento: npm run db:init:dev
  • Produção: npm run db:init:prod
  • Testes: npm run db:init:test

Estrutura do Banco

A estrutura do banco de dados é definida em src/db/sql/schema.sql. Este arquivo deve ser mantido atualizado com todas as alterações feitas no banco.

SQLite MCP Server para Cursor

Este projeto inclui um servidor MCP (Model Context Protocol) para SQLite que permite ao Cursor acessar funcionalidades do SQLite através do AI Claude. O servidor MCP facilita a interação com bancos de dados SQLite, possibilitando:

  • Executar consultas SQL diretamente pelo Claude
  • Analisar dados de negócios
  • Gerar automaticamente memorandos de insights
  • Criar e manipular tabelas e dados

Configuração do SQLite MCP

  1. Construir e iniciar o servidor MCP:

    cd .docker
    docker-compose build
    docker-compose up -d
    
  2. Configurar o Cursor para usar o servidor MCP, adicionando ao arquivo claude_desktop_config.json:

    "mcpServers": {
      "sqlite": {
        "command": "docker",
        "args": [
          "run",
          "--rm",
          "-i",
          "-v",
          "sqlite-data:/mcp",
          "platform-management-sqlite-mcp",
          "--db-path",
          "/mcp/platform-management.db"
        ]
      }
    }
    
  3. Reiniciar o Cursor para aplicar as mudanças.

Uso do SQLite MCP no Cursor

  1. Clique no ícone de clipe de papel na interface de chat do Claude
  2. Selecione o ícone do MCP (dois plugues elétricos conectando)
  3. Escolha "mcp-demo" entre os prompts disponíveis
  4. Informe um tópico (ex: "vendas no varejo", "gestão de estoque", etc.)
  5. Siga as orientações do Claude para interagir com o banco de dados

Para mais detalhes, consulte o arquivo .docker/sqlite/README.md.

Exemplo de Rotas

Tabelas

Listar Tabelas

GET /tabelas

Criar Tabela

POST /tabelas
Content-Type: application/json

{
  "nomeTabela": "Usuarios",
  "nomeTecnico": "usuarios",
  "descricao": "Tabela de usuários do sistema",
  "tipoTabela": "Base de Dados",
  "chavePrimaria": "id",
  "restricoes": "UNIQUE (email)",
  "dataCriacao": "2023-01-01T00:00:00Z",
  "ultimaModificacao": "2023-01-01T00:00:00Z",
  "responsavel": "João da Silva",
  "comentarios": "Tabela criada para armazenar dados de usuários"
}

Atualizar Tabela

PATCH /tabelas/{id}
Content-Type: application/json

{
  "nomeTabela": "Usuarios",
  "nomeTecnico": "usuarios",
  "descricao": "Tabela de usuários do sistema",
  "tipoTabela": "Base de Dados",
  "chavePrimaria": "id",
  "restricoes": "UNIQUE (email)",
  "dataCriacao": "2023-01-01T00:00:00Z",
  "ultimaModificacao": "2023-01-01T00:00:00Z",
  "responsavel": "João da Silva",
  "comentarios": "Tabela criada para armazenar dados de usuários"
}

Remover Tabela

DELETE /tabelas/{id}

Campos

Listar Campos

GET /campos

Criar Campo

POST /campos
Content-Type: application/json

{
  "idTabela": 1,
  "nomeCampo": "nome",
  "nomeTecnico": "nome_tecnico",
  "descricao": "Nome do usuário",
  "tipoDado": "VARCHAR",
  "tamanho": 255,
  "precisao": 2,
  "obrigatorio": false,
  "valorPadrao": "N/A",
  "aceitaNulo": true,
  "chavePrimaria": false,
  "chaveEstrangeira": false,
  "indice": false,
  "tipoIndice": "Unique",
  "autoIncremento": false,
  "restricoes": "UNIQUE",
  "comentarios": "Campo utilizado para armazenar o nome do usuário"
}

Atualizar Campo

PATCH /campos/{id}
Content-Type: application/json

{
  "idTabela": 1,
  "nomeCampo": "nome",
  "nomeTecnico": "nome_tecnico",
  "descricao": "Nome do usuário",
  "tipoDado": "VARCHAR",
  "tamanho": 255,
  "precisao": 2,
  "obrigatorio": false,
  "valorPadrao": "N/A",
  "aceitaNulo": true,
  "chavePrimaria": false,
  "chaveEstrangeira": false,
  "indice": false,
  "tipoIndice": "Unique",
  "autoIncremento": false,
  "restricoes": "UNIQUE",
  "comentarios": "Campo utilizado para armazenar o nome do usuário"
}

Remover Campo

DELETE /campos/{id}

Relacionamentos

Listar Relacionamentos

GET /relacionamentos

Criar Relacionamento

POST /relacionamentos
Content-Type: application/json

{
  "idTabelaOrigem": 1,
  "idTabelaDestino": 2,
  "campoOrigem": "id",
  "campoDestino": "usuario_id",
  "tipoRelacionamento": "1:N",
  "integridadeReferencial": "CASCADE",
  "descricao": "Relacionamento entre usuários e pedidos",
  "comentarios": "Relacionamento criado para vincular usuários aos pedidos"
}

Atualizar Relacionamento

PATCH /relacionamentos/{id}
Content-Type: application/json

{
  "idTabelaOrigem": 1,
  "idTabelaDestino": 2,
  "campoOrigem": "id",
  "campoDestino": "usuario_id",
  "tipoRelacionamento": "1:N",
  "integridadeReferencial": "CASCADE",
  "descricao": "Relacionamento entre usuários e pedidos",
  "comentarios": "Relacionamento criado para vincular usuários aos pedidos"
}

Remover Relacionamento

DELETE /relacionamentos/{id}