API REST de cursos construída com Node.js, TypeScript, Fastify, PostgreSQL e Drizzle ORM.
O projeto implementa uma API backend com validação e tipagem de rotas, persistência em PostgreSQL, migrations versionadas e testes de integração. O domínio atual cobre cursos e matrículas.
- Node.js + TypeScript
- Fastify
- Drizzle ORM + PostgreSQL
- Zod +
fastify-type-provider-zod - Swagger/OpenAPI + Scalar
- Vitest + Supertest
- Docker Compose
- Listagem paginada de cursos com busca por título e contagem de matrículas.
- Consulta de curso por ID.
- Criação e exclusão de cursos.
- Documentação interativa em
/api/docsquandoNODE_ENV=development. - Testes de integração das rotas.
| Método | Rota | Descrição |
|---|---|---|
GET |
/api/courses?search=&orderBy=title&page=1 |
Lista cursos com busca e paginação |
GET |
/api/courses/:id |
Busca um curso por ID |
POST |
/api/courses |
Cria um curso com title e description opcional |
DELETE |
/api/courses/:id |
Remove um curso por ID |
- Node.js 22+
- Docker (para o PostgreSQL local)
-
Instale as dependências:
npm install
-
Suba o PostgreSQL:
docker compose up -d
-
Crie o arquivo de ambiente:
cp .env.example .env
O valor padrão usa o banco
coursescriado pelo Docker Compose:NODE_ENV=development DATABASE_URL=postgresql://postgres:postgres@localhost:5432/courses
-
Aplique as migrations:
npx dotenv -e .env -- npm run db:migrate
-
Opcionalmente, popule o banco:
npm run db:seed
-
Inicie o servidor:
npm run dev
A API fica em
http://localhost:3000e a documentação emhttp://localhost:3000/api/docs.
Crie um banco de testes e configure .env.test com a variável DATABASE_URL. Depois rode:
npm testOs testes usam Vitest, Supertest e coverage com V8.
| Comando | Descrição |
|---|---|
npm run dev |
Inicia o servidor com watch mode |
npm run db:generate |
Gera migrations do Drizzle |
npm run db:migrate |
Aplica migrations |
npm run db:seed |
Popula o banco |
npm run db:studio |
Abre o Drizzle Studio |
npm test |
Executa os testes com coverage |
src/
app.ts # Configuração do Fastify e rotas
server.ts # Inicialização do servidor
database/
client.ts # Conexão com PostgreSQL
schema.ts # Tabelas users, courses e enrollments
seed.ts # Dados iniciais
routes/ # Rotas e testes de integração
drizzle/ # Migrations e metadados
docker-compose.yml # PostgreSQL 17 local
MIT. Consulte LICENSE.