Skip to content

Repository files navigation

Node.js Personal Bootcamp

Repositório de estudos de Node.js — uma jornada aula a aula, dos conceitos básicos do runtime até uma API REST com Fastify, PostgreSQL e Docker.

Stack

  • Node.js + TypeScript (ESM)
  • Fastify 5 — framework HTTP
  • @fastify/jwt + bcrypt — autenticação com JWT e hash de senhas
  • PostgreSQL 16 — banco de dados (driver pg)
  • Vitest — testes automatizados
  • GitHub Actions — CI (build e testes a cada push/PR)
  • Docker + Docker Compose — containerização da API e do banco

Aulas

Aula Tema Material
01 Node.js, NPM e TypeScript — conceitos básicos e estrutura inicial do projeto docs/lesson-1.md
02 Assíncrono: Promises, async/await, event loop, call stack e microtasks docs/lesson-2.md
03 HTTP, REST e a primeira API em Node.js puro docs/lesson-3.md
04 Fastify: saindo do Node.js puro docs/lesson-4.md
05 CRUD completo, PostgreSQL, Docker e repository pattern docs/lesson-5.md
06 Dockerização da API docs/lesson-6.md
07 Validação, schemas do Fastify e tratamento de erros docs/lesson-7.md
08 Autenticação com JWT e bcrypt docs/lesson-8.md
09 Testes automatizados com Vitest docs/lesson-9.md
10 Docker em produção: multi-stage build docs/lesson-10.md
11 Migrations com SQL puro docs/lesson-11.md
12 Produção: logs, request ID, health probes e graceful shutdown docs/lesson-12.md
13 CI com GitHub Actions docs/lesson-13.md

API

Método Rota Auth Descrição
GET /health/live Liveness probe (processo de pé)
GET /health/ready Readiness probe (testa conexão com o banco)
POST /auth/register Registra usuário (senha com hash bcrypt)
POST /auth/login Autentica e retorna o token JWT
GET /users 🔒 Lista usuários
GET /users/:id 🔒 Busca usuário por id
POST /users 🔒 Cria usuário
PUT /users/:id 🔒 Atualiza usuário
DELETE /users/:id 🔒 Remove usuário

Rotas com 🔒 exigem o header Authorization: Bearer <token> (token obtido no login).

Estrutura do projeto

migrations/         # Migrations em SQL puro (001_..., 002_...)
src/
├── config/         # Conexão com o banco (pg)
├── controllers/    # Camada HTTP (request/response)
├── database/       # Runner de migrations
├── errors/         # Erros da aplicação (AppError)
├── repositories/   # Acesso a dados (repository pattern)
├── routes/         # Registro de rotas e schemas
├── schemas/        # Schemas de validação do Fastify
├── services/       # Regras de negócio
├── types/          # Tipos TypeScript
├── app.ts          # Instância do Fastify (buildApp)
└── server.ts       # Entrypoint (buildApp + listen)
tests/              # Testes (Vitest)

Como rodar

Com Docker (recomendado)

docker compose up --build

O compose sobe o Postgres, espera o healthcheck, roda as migrations (serviço migrate) e só então inicia a API.

Local

Suba apenas o banco pelo Docker e rode a API na máquina:

docker compose up -d postgres
npm install
cp .env.example .env
npm run build
npm run migrate
npm start

As variáveis de ambiente ficam documentadas em .env.example: PORT, DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD, JWT_SECRET — e opcionalmente LOG_LEVEL (padrão info).

Testes

npm test            # roda a suíte uma vez
npm run test:watch  # modo watch

Os testes usam mocks do repository (unitários) e app.inject() do Fastify (rotas), sem precisar de banco nem servidor rodando.

About

Personal bootcamp NodeJS

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages