Skip to content

Latest commit

 

History

History
447 lines (360 loc) · 9.51 KB

File metadata and controls

447 lines (360 loc) · 9.51 KB

Guia de Configuração - Varion

📋 Pré-requisitos

Software Necessário

Verificação dos Pré-requisitos

# Verificar versões
node --version    # >= 18.0.0
pnpm --version    # >= 8.0.0
git --version     # Qualquer versão recente
docker --version  # >= 20.0.0
docker-compose --version  # >= 2.0.0

🚀 Instalação Rápida (Docker)

1. Clone o Repositório

git clone <repository-url>
cd Varion

2. Configuração Automática

# Execute o script de configuração
./scripts/setup-env.sh

# Ou configure manualmente
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env

3. Executar com Docker

# Build e start de todos os serviços
docker-compose up --build

# Em modo detached (background)
docker-compose up --build -d

# Ver logs em tempo real
docker-compose logs -f

4. Verificar Instalação

🛠️ Instalação para Desenvolvimento

1. Instalar Dependências

# Instalar dependências do workspace
pnpm install

# Ou instalar individualmente
cd backend && pnpm install
cd ../frontend && pnpm install

2. Configurar Banco de Dados

Opção A: PostgreSQL Local

# Instalar PostgreSQL
# Ubuntu/Debian
sudo apt install postgresql postgresql-contrib

# macOS
brew install postgresql

# Iniciar serviço
sudo systemctl start postgresql  # Linux
brew services start postgresql   # macOS

# Criar banco e usuário
sudo -u postgres psql
CREATE DATABASE varion_dev;
CREATE USER varion WITH PASSWORD 'varion_password';
GRANT ALL PRIVILEGES ON DATABASE varion_dev TO varion;
\q

Opção B: Docker PostgreSQL

# Executar apenas o banco
docker-compose up db -d

# Verificar se está rodando
docker-compose ps

3. Configurar Variáveis de Ambiente

Backend (.env)

# Copiar arquivo exemplo
cp backend/.env.example backend/.env

# Editar conforme necessário
nano backend/.env

Exemplo de configuração:

# Database
DB_TYPE=postgres
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=varion
DB_PASSWORD=varion_password
DB_DATABASE=varion_dev

# Application
PORT=3001
NODE_ENV=development

# Pool de conexões
DB_POOL_MAX=10
DB_POOL_MIN=2

Frontend (.env.local)

# Copiar arquivo exemplo
cp frontend/.env.example frontend/.env.local

# Editar conforme necessário
nano frontend/.env.local

Exemplo de configuração:

# API URLs
NEXT_PUBLIC_API_URL=http://localhost:3001
NEXT_PUBLIC_APP_URL=http://localhost:3000

# Development
NODE_ENV=development

4. Executar Migrations

cd backend

# Executar migrations
pnpm run migrate

# Verificar status
pnpm run migrate:show

5. Iniciar Aplicações

Terminal 1 - Backend

cd backend
pnpm start:dev

Terminal 2 - Frontend

cd frontend
pnpm dev

🔧 Configurações Avançadas

Configuração do TypeScript

Backend (tsconfig.json)

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "outDir": "./dist",
    "rootDir": "./src"
  }
}

Frontend (tsconfig.json)

{
  "compilerOptions": {
    "target": "ES2022",
    "lib": ["dom", "dom.iterable", "ES6"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "jsx": "preserve",
    "plugins": [{"name": "next"}]
  }
}

Configuração do ESLint

Raiz (.eslintrc.js)

module.exports = {
  root: true,
  extends: ['@repo/eslint-config'],
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 2022,
    sourceType: 'module',
  },
}

Configuração do Docker

docker-compose.yml Personalizado

services:
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-varion_dev}
      POSTGRES_USER: ${POSTGRES_USER:-varion}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-varion_password}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  backend:
    build: ./backend
    environment:
      DB_HOST: db
      DB_PORT: 5432
    depends_on:
      - db
    ports:
      - "3001:3001"

  frontend:
    build: ./frontend
    environment:
      NEXT_PUBLIC_API_URL: http://localhost:3001
    depends_on:
      - backend
    ports:
      - "3000:3000"

volumes:
  postgres_data:

🧪 Configuração de Testes

Backend ✅ IMPLEMENTADO

cd backend

# ✅ Dependências já instaladas
# jest, @types/jest, supertest, @types/supertest, better-sqlite3

# ✅ Jest configurado (jest.config.js já existe)
# Configuração completa com TypeScript, cobertura e SQLite em memória

# ✅ Executar testes
pnpm test                    # Todos os testes (517 testes)
pnpm test:coverage          # Com cobertura (98.58%)
pnpm test:watch             # Modo watch para desenvolvimento
pnpm test:verbose           # Detalhado com logs

# ✅ Visualizar cobertura
open coverage/lcov-report/index.html

Estrutura Atual dos Testes Backend

backend/src/
├── __tests__/
│   ├── basic.test.ts                      # ✅ Testes básicos
│   ├── integration.test.ts                # ✅ Testes de integração
│   ├── integration/
│   │   ├── states.integration.test.ts     # ✅ 436 linhas
│   │   └── todo.integration.test.ts       # ✅ Completo
│   ├── examples/                          # ✅ Templates
│   ├── setup/                             # ✅ Configuração
│   └── mocks/                             # ✅ Mocks
└── modules/                               # ✅ Testes por módulo
    ├── projects/*.test.ts                 # ✅ 7 arquivos
    ├── states/*.test.ts                   # ✅ 5 arquivos
    ├── todo/*.test.ts                     # ✅ 3 arquivos
    └── comment/*.test.ts                  # ✅ 3 arquivos

Frontend 🟡 EM DESENVOLVIMENTO

cd frontend

# 🟡 Planejado: Instalar dependências de teste
pnpm add -D jest @testing-library/react @testing-library/jest-dom

# 🟡 Planejado: Configurar Jest
echo 'const nextJest = require("next/jest");
const createJestConfig = nextJest({ dir: "./" });
module.exports = createJestConfig({
  testEnvironment: "jsdom",
  setupFilesAfterEnv: ["<rootDir>/jest.setup.js"]
});' > jest.config.js

# 🟡 Status: Configuração básica existe, implementação pendente

E2E Testing 🟡 PLANEJADO

# 🟡 Planejado: Configuração Playwright
cd frontend
pnpm add -D @playwright/test

# 🟡 Configuração futura
npx playwright install

🚀 Scripts Úteis

Package.json Scripts

{
  "scripts": {
    "dev": "concurrently \"pnpm --filter backend start:dev\" \"pnpm --filter frontend dev\"",
    "build": "pnpm --filter backend build && pnpm --filter frontend build",
    "test": "pnpm --filter backend test && pnpm --filter frontend test",
    "lint": "pnpm --filter backend lint && pnpm --filter frontend lint",
    "type-check": "pnpm --filter backend type-check && pnpm --filter frontend type-check"
  }
}

Scripts de Desenvolvimento

# Resetar banco de dados
./scripts/reset-db.sh

# Gerar nova migration
./scripts/generate-migration.sh "AddNewTable"

# Backup do banco
./scripts/backup-db.sh

# Restaurar backup
./scripts/restore-db.sh backup-file.sql

🔍 Solução de Problemas

Problemas Comuns

Erro de Conexão com Banco

# Verificar se PostgreSQL está rodando
sudo systemctl status postgresql  # Linux
brew services list | grep postgres  # macOS

# Verificar conectividade
psql -h localhost -U varion -d varion_dev

Porta já em uso

# Encontrar processo usando a porta
lsof -i :3000  # ou :3001, :5432
sudo kill -9 <PID>

# Usar portas alternativas
PORT=3002 pnpm start:dev

Problemas de Dependências

# Limpar cache do pnpm
pnpm store prune

# Reinstalar dependências
rm -rf node_modules pnpm-lock.yaml
pnpm install

Problemas de Permissions (Docker)

# Dar permissões de execução
chmod +x scripts/*.sh

# Problemas de volume
sudo chown -R $USER:$USER .

Logs e Debug

Ver logs do Docker

# Logs de todos os serviços
docker-compose logs

# Logs de serviço específico
docker-compose logs backend

# Seguir logs em tempo real
docker-compose logs -f frontend

Debug do Backend

# Modo debug
DEBUG=* pnpm start:dev

# Logs específicos
DEBUG=express:* pnpm start:dev

📞 Suporte

Se você encontrar problemas durante a instalação:

  1. Verifique os pré-requisitos - Versões corretas instaladas
  2. Consulte os logs - Informações de erro detalhadas
  3. Limpe o cache - pnpm store prune e reinstale
  4. Verifique as portas - Certifique-se de que estão livres
  5. Consulte a documentação - README específicos de cada módulo

Links Úteis