From bf26947be3ef364df25b13de9a3f440ec543c8a1 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Mon, 12 Jan 2026 01:24:01 -0300 Subject: [PATCH] =?UTF-8?q?chore:=20configura=C3=A7=C3=A3o=20do=20ambiente?= =?UTF-8?q?=20docker=20e=20scripts=20de=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.dev.example | 29 +++++++++---------- README.md | 60 +++++++++++++++++++++++----------------- package.json | 11 +++++--- scripts/generate-docs.js | 5 ++++ scripts/setup-env.js | 8 ++++++ 5 files changed, 67 insertions(+), 46 deletions(-) create mode 100644 scripts/generate-docs.js create mode 100644 scripts/setup-env.js diff --git a/.env.dev.example b/.env.dev.example index 98a9a3c..6a28dc0 100644 --- a/.env.dev.example +++ b/.env.dev.example @@ -1,32 +1,29 @@ +# ENVIRONMENT NODE_ENV=development NODE_PORT=5122 -LOG_LEVEL=debug -DOTENV_CONFIG_QUIET=true -RATE_LIMIT_ENABLED=true + +# ALLOWED ORIGINS ALLOWED_ORIGINS="https://eventdev.org,http://app:5173,http://postgres-db:5432,http://supertokens-auth:3567,http://redis-cache:6379" -WEBSITE_DOMAIN="http://localhost:3000" + +# DATABASE POSTGRES_DB=gt_dev POSTGRES_USER=devevent POSTGRES_PASSWORD=SENHA_SEGURA_DEV DATABASE_ENGINE=postgres -DATABASE_URL="postgresql://devevent:SENHA_SEGURA_DEV@localhost:5439/gt_dev?schema=public" -DATABASE_PORT=5439 +DATABASE_URL="postgresql://devevent:SENHA_SEGURA_DEV@postgres-db:5432/gt_dev?schema=public" +DATABASE_PORT=5432 PRISMA_STUDIO_PORT=5555 -PRISMA_HIDE_UPDATE_MESSAGE=true + +# SUPERTOKENS SUPERTOKENS_PORT=3567 +SUPERTOKENS_CONNECTION_URI="http://supertokens-auth:3567" -SMTP_HOST="smtp.gmail.com" -SMTP_PORT=587 -SMTP_SECURE=false -SMTP_USER="eventdevcommunities@gmail.com" -SMTP_PASS="Senha de App (Ex: abcd efgh ijkl rmno)" -SMTP_FROM_NAME="EventDev (Não Responda)" -SMTP_FROM_EMAIL="eventdevcommunities+noreply@gmail.com" -SMTP_REPLY_TO="no-reply@eventdev.org" -MERCADO_PAGO_ACCESS_TOKEN="TEST-00000000-0000-0000-0000-000000000000" +# REDIS +REDIS_HOST=redis-cache +REDIS_PORT=6379 diff --git a/README.md b/README.md index aba95c1..0bc11a1 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,20 @@ O **EventDev Server** é a API backend para a plataforma EventDev, construída c - **Cache/Rate Limit**: Redis - **Compilação**: SWC (Speedy Web Compiler) para desenvolvimento rápido. +## Ferramentas necessárias + +- [**node.js**](https://nodejs.org/en/download) +- [**docker**](https://www.docker.com/get-started/) +- [**pnpm**](https://pnpm.io/pt/installation) + ## Scripts Principais ### Desenvolvimento -- `pnpm start-dev`: Inicia o servidor em modo de desenvolvimento (com hot-reload e SWC). -- `pnpm start-debug`: Inicia em modo debug. +```bash +pnpm install # to install dependencies +pnpm run dev # to start the development server +``` ### Testes @@ -64,46 +72,46 @@ Abaixo estão os comandos essenciais organizados por ferramenta e caso de uso. O `Makefile` é a interface principal para gerenciar a infraestrutura Docker. -| Comando | Caso de Uso | Descrição | -| :--- | :--- | :--- | -| `make dev-up` | **Início do Dia** | Sobe todo o ambiente de desenvolvimento (API + Banco + Redis + Auth). Inclui script de inicialização (`init-dev.sql`) para criar os bancos separadamente. | -| `make dev-down` | **Fim do Dia** | Para e remove todos os containers e volumes de desenvolvimento. | -| `make dev-logs` | **Monitoramento** | Exibe os logs da API em tempo real. | -| `make dev-shell` | **Debug Avançado** | Abre um terminal `sh` dentro do container da API. | -| `make test-deps-up` | **Testes Locais** | Sobe apenas as dependências (DB/Redis) para rodar testes locais (`pnpm test`). | -| `make verify-all` | **CI/CD** | Executa a verificação completa (lint, testes, build) dentro do container. | -| `make db-studio` | **Gestão de Dados** | Abre o Prisma Studio para visualizar/editar dados do banco. | +| Comando | Caso de Uso | Descrição | +| :------------------ | :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `make dev-up` | **Início do Dia** | Sobe todo o ambiente de desenvolvimento (API + Banco + Redis + Auth). Inclui script de inicialização (`init-dev.sql`) para criar os bancos separadamente. | +| `make dev-down` | **Fim do Dia** | Para e remove todos os containers e volumes de desenvolvimento. | +| `make dev-logs` | **Monitoramento** | Exibe os logs da API em tempo real. | +| `make dev-shell` | **Debug Avançado** | Abre um terminal `sh` dentro do container da API. | +| `make test-deps-up` | **Testes Locais** | Sobe apenas as dependências (DB/Redis) para rodar testes locais (`pnpm test`). | +| `make verify-all` | **CI/CD** | Executa a verificação completa (lint, testes, build) dentro do container. | +| `make db-studio` | **Gestão de Dados** | Abre o Prisma Studio para visualizar/editar dados do banco. | ### PNPM (Ciclo de Desenvolvimento) Comandos para o dia a dia de codificação. -| Comando | Caso de Uso | Descrição | -| :--- | :--- | :--- | -| `pnpm start-dev` | **Codificação** | Roda a API localmente com hot-reload (SWC). | -| `pnpm lint` | **Qualidade** | Verifica e corrige problemas de estilo de código. | -| `pnpm test-all` | **Validação** | Roda testes unitários e E2E em sequência. | -| `pnpm verify-all` | **CI/CD** | Roda lint, testes e build para garantir integridade total. | -| `pnpm build` | **Deploy** | Compila o projeto para a pasta `dist` (produção). | +| Comando | Caso de Uso | Descrição | +| :---------------- | :-------------- | :--------------------------------------------------------- | +| `pnpm start-dev` | **Codificação** | Roda a API localmente com hot-reload (SWC). | +| `pnpm lint` | **Qualidade** | Verifica e corrige problemas de estilo de código. | +| `pnpm test-all` | **Validação** | Roda testes unitários e E2E em sequência. | +| `pnpm verify-all` | **CI/CD** | Roda lint, testes e build para garantir integridade total. | +| `pnpm build` | **Deploy** | Compila o projeto para a pasta `dist` (produção). | ### Docker (Infraestrutura) Comandos diretos do Docker Compose (geralmente abstraídos pelo Makefile). -| Comando | Caso de Uso | Descrição | -| :--- | :--- | :--- | -| `docker compose -f docker-compose.dev.yml build` | **Atualização** | Reconstrói as imagens de desenvolvimento (útil após mudar `package.json`). | -| `docker compose -f docker-compose.prod.yml build` | **Simulação Prod** | Constrói a imagem otimizada de produção. | +| Comando | Caso de Uso | Descrição | +| :------------------------------------------------ | :----------------- | :------------------------------------------------------------------------- | +| `docker compose -f docker-compose.dev.yml build` | **Atualização** | Reconstrói as imagens de desenvolvimento (útil após mudar `package.json`). | +| `docker compose -f docker-compose.prod.yml build` | **Simulação Prod** | Constrói a imagem otimizada de produção. | ### Nest CLI (Scaffolding) Comandos para gerar código boilerplate. -| Comando | Caso de Uso | Descrição | -| :--- | :--- | :--- | +| Comando | Caso de Uso | Descrição | +| :---------------------------- | :--------------- | :------------------------------------------------------------- | | `nest g resource module/nome` | **Nova Feature** | Cria um novo módulo completo (Controller, Service, DTOs, etc). | -| `nest g module module/nome` | **Estrutura** | Cria apenas o módulo. | -| `nest g service module/nome` | **Lógica** | Cria apenas o service. | +| `nest g module module/nome` | **Estrutura** | Cria apenas o módulo. | +| `nest g service module/nome` | **Lógica** | Cria apenas o service. | ## Roadmap e Checklist diff --git a/package.json b/package.json index a23c24f..9c21df2 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "license": "MIT", "type": "module", "engines": { - "node": ">=20.19.3", - "pnpm": ">=10.23.0" + "node": "22.x", + "pnpm": "10.x" }, "imports": { "#*": "./dist/*", @@ -31,7 +31,7 @@ "start-prod": "node --import @swc-node/register/esm-register dist/main.js", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --max-warnings=0", "format": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", - "docs-generate": "npx prisma generate --no-hints >/dev/null 2>&1 && npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script 2>&1 | grep -E '^(--|CREATE|ALTER|DROP)' > docs/schema.sql && echo 'Schemas gerados! Para gerar openapi.json execute: pnpm start-dev'", + "docs-generate": "node scripts/generate-docs.js", "generate-http": "node --import @swc-node/register/esm-register docs/rest-client/tools/generate-http.ts", "simulate-webhook": "node --import @swc-node/register/esm-register tools/simulate-webhook.ts", "test": "jest --runInBand --detectOpenHandles", @@ -46,7 +46,10 @@ "prepare-test-db": "node --import @swc-node/register/esm-register test/setup/prepare-test-db.ts", "migrate-prod": "prisma migrate deploy", "seed": "prisma db seed", - "verify-all": "pnpm lint && pnpm test-all && pnpm build" + "verify-all": "pnpm lint && pnpm test-all && pnpm build", + "env:setup": "node scripts/setup-env.js", + "dev": "pnpm run env:setup && docker compose --env-file .env -f docker-compose.dev.yml up --build -d", + "dev:down": "docker compose -f docker-compose.dev.yml down -v" }, "dependencies": { "@dotenvx/dotenvx": "^1.51.1", diff --git a/scripts/generate-docs.js b/scripts/generate-docs.js new file mode 100644 index 0000000..ed88798 --- /dev/null +++ b/scripts/generate-docs.js @@ -0,0 +1,5 @@ +import { execSync } from 'child_process'; + +execSync('npx prisma generate --no-hints >/dev/null 2>&1'); +execSync('npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script 2>&1 | grep -E "^(--|CREATE|ALTER|DROP)" > docs/schema.sql'); +console.log('Schemas gerados! Para gerar openapi.json execute: pnpm start-dev'); \ No newline at end of file diff --git a/scripts/setup-env.js b/scripts/setup-env.js new file mode 100644 index 0000000..d838902 --- /dev/null +++ b/scripts/setup-env.js @@ -0,0 +1,8 @@ +import fs from 'fs'; + +if (!fs.existsSync('.env')) { + fs.copyFileSync('.env.dev.example', '.env'); + console.log('.env file created successfully!'); +} else { + console.log('.env file already exists.'); +}