https://github.com/wagnersuzano2/rocketseat-api-nodejs
Repositório do projeto "Sua Primeira API com Node.js" da Rocketseat. Uma API RESTful construída com Node.js, TypeScript e Fastify, com integração de banco de dados PostgreSQL via Docker, testes automatizados e documentação com Swagger
https://github.com/wagnersuzano2/rocketseat-api-nodejs
docker nodejs postgresql rest-api rocketseat typescript
Last synced: 3 months ago
JSON representation
Repositório do projeto "Sua Primeira API com Node.js" da Rocketseat. Uma API RESTful construída com Node.js, TypeScript e Fastify, com integração de banco de dados PostgreSQL via Docker, testes automatizados e documentação com Swagger
- Host: GitHub
- URL: https://github.com/wagnersuzano2/rocketseat-api-nodejs
- Owner: WagnerSuzano2
- License: mit
- Created: 2025-08-12T03:41:39.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-09-11T18:55:02.000Z (10 months ago)
- Last Synced: 2025-09-11T21:41:17.045Z (10 months ago)
- Topics: docker, nodejs, postgresql, rest-api, rocketseat, typescript
- Language: TypeScript
- Homepage:
- Size: 19.5 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Desafio Node.js – API de Cursos
[](https://nodejs.org/en/)
[](https://www.typescriptlang.org/)
[](https://www.fastify.io/)
[](https://www.postgresql.org/)
[](https://www.docker.com/)
## 📝 Sobre o Projeto
Este projeto é uma API RESTful para o gerenciamento de cursos, desenvolvida durante o **Desafio: Sua Primeira API com Node.js** da Rocketseat.
A API foi construída com um foco em arquitetura robusta, seguindo as melhores práticas de mercado para garantir segurança, desempenho e manutenibilidade. O projeto inclui um ambiente completo de desenvolvimento e testes.
### Funcionalidades
- **Autenticação de Usuário** (`POST /sessions`): Login de usuário com validação de credenciais e geração de JWT.
- **Gerenciamento de Cursos** (`POST`, `GET`): Rotas para criar, listar e buscar cursos por ID.
- **Busca, Paginação e Ordenação**: Funcionalidades avançadas para filtrar, ordenar e paginar a lista de cursos.
- **Documentação Interativa**: Documentação da API gerada automaticamente com **Swagger** e **Scalar**.
---
## 💻 Tecnologias
As seguintes tecnologias foram utilizadas na construção do projeto:
- **Back-end:** `Node.js`, `Fastify`, `TypeScript`
- **Banco de Dados:** `PostgreSQL` (Docker e Neon)
- **ORM:** `Drizzle ORM` (`drizzle-kit`)
- **Validação:** `Zod`
- **Autenticação:** `argon2`, `jsonwebtoken`
- **Testes:** `Vitest`, `Supertest`, `@faker-js/faker` (para dados de teste)
---
## ⚙️ Configuração e Execução
### Pré-requisitos
- `Node.js` (v22.x ou superior)
- `Docker` e `Docker Compose`
- `npm`
### Passos
1. Clone o repositório:
- Clone o repositório e acesse a pasta do projeto.
2. Instale as dependências:
```bash
npm install
```
3. Configure o banco de dados localmente:
- Crie um arquivo `.env` na raiz do projeto.
- Defina a URL do seu banco de dados local e a chave secreta JWT.
```env
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/desafio"
JWT_SECRET="sua_chave_secreta_aqui"
```
4. Inicie o banco de dados com Docker:
```bash
docker-compose up -d
```
5. Aplique as migrações do banco de dados para criar as tabelas:
```bash
npm run db:migrate
```
6. Inicie a aplicação em modo de desenvolvimento:
```bash
npm run dev
```
---
## 📄 Documentação da API
Após iniciar o servidor, a documentação interativa da API estará disponível em:
`http://localhost:3333/docs`
---
## 🧪 Testes
Para rodar os testes de integração do projeto:
```bash
npm run test
```
---
## Scripts
- `npm run dev`: inicia o servidor com reload e carrega variáveis de `.env`
- `npm run db:generate`: gera artefatos do Drizzle a partir do schema
- `npm run db:migrate`: aplica migrações no banco
- `npm run db:studio`: abre o Drizzle Studio
## Licença
ISC (ver `package.json`).