API REST para gerenciamento de pedidos.
📃 Sobre • 🛠️ Tecnologias • ✨ Funcionalidades • 🚀 Como rodar • 📖 Documentação • 🧪 Testes
A Jitterbit API é uma API REST desenvolvida como parte do Desafio Técnico da Jitterbit. O desafio consiste em criar uma API para gerenciamento de pedidos, permitindo criar, listar, buscar, atualizar e deletar pedidos com seus respectivos itens. A API realiza o mapeamento dos campos recebidos no formato português para o formato em inglês persistido no banco de dados. Conta com autenticação via JWT para proteger os endpoints e documentação interativa via Swagger. O backend é construído com Node.js, Fastify e Prisma ORM.
⚠️ O desafio originalmente solicita o uso de JavaScript, porém optei por desenvolver em TypeScript para demonstrar maior domínio da linguagem e garantir mais segurança e qualidade no código com tipagem estática.
- 🟢 Node.js — Ambiente de execução JavaScript server-side.
- ⚡ Fastify — Framework web focado em performance e baixo overhead.
- 🟦 TypeScript — Tipagem estática e segurança em tempo de desenvolvimento.
- 🔼 Prisma ORM — ORM moderno e type-safe para TypeScript.
- 🐘 PostgreSQL — Banco de dados relacional robusto e confiável.
- 🐳 Docker — Containerização do banco de dados para ambiente reproduzível.
- 📖 Swagger — Documentação interativa da API via
@fastify/swagger. - 🔐 JWT — Autenticação stateless via
@fastify/jwt. - 🧪 Vitest — Framework de testes unitários e de integração.
- 💎 Zod — Validação e parsing de schemas com inferência de tipos.
- 🔍 Biome — Linting e formatação de código de alta performance.
- 🔄 GitHub Actions — Integração contínua e automação do pipeline de testes.
- ☁️ Render — Plataforma de deploy em nuvem para hospedagem da API.
- 📦 Criar um novo pedido com itens
- 🔍 Buscar pedido por ID
- 📋 Listar todos os pedidos com paginação
- ✏️ Atualizar um pedido existente
- 🗑️ Deletar um pedido
- 🔁 Mapeamento automático dos campos (PT → EN)
- 🔐 Autenticação com JWT
- 🛡️ Validação de dados com Zod
- 📖 Documentação interativa da API com Swagger
- 🧪 Testes automatizados com Vitest
- 🔄 Pipeline de CI rodando os testes a cada push
- ☁️ Deploy em produção na Render
- 🟩 Node.js 20+
- 📦 npm
- 🐳 Docker
- Clone o repositório:
git clone https://github.com/joschonarth/jitterbit-api.git- Acesse a pasta do projeto:
cd jitterbit-api- Instale as dependências:
npm install- Configure as variáveis de ambiente copiando o arquivo de exemplo:
cp .env.example .env- Em seguida, abra o arquivo
.enve preencha as variáveis:
# Node Environment
NODE_ENV=development
# Port
PORT=3333
# Database
DATABASE_URL="postgresql://docker:docker@localhost:5432/jitterbit?schema=public"
# Auth
JWT_SECRET="your-secret-key"
API_USERNAME="admin"
API_PASSWORD="admin"Suba o container do PostgreSQL com Docker:
docker compose up -dExecute o setup para gerar o Prisma Client e aplicar as migrations:
npm run setupInicia o servidor em modo de desenvolvimento:
npm run devO servidor estará disponível em http://localhost:3333.
A API está disponível em produção na Render:
🔗 https://jitterbit-api.onrender.com
A documentação interativa está disponível em:
🔗 https://jitterbit-api.onrender.com/docs
⚠️ A aplicação está hospedada no plano gratuito da Render, portanto pode haver um delay de até 50 segundos na primeira requisição devido ao cold start.
Com o servidor rodando, acesse a documentação interativa gerada pelo Swagger:
Todos os endpoints de pedidos exigem autenticação. Para obter o token, faça uma requisição para o endpoint de autenticação:
curl --location 'http://localhost:3333/auth' \
--header 'Content-Type: application/json' \
--data '{
"username": "admin",
"password": "admin"
}'Utilize o token retornado no header Authorization das requisições:
Authorization: Bearer <token>
| Método | Rota | Descrição |
|---|---|---|
POST |
/auth |
Autenticar e obter token JWT |
POST |
/order |
Criar um novo pedido |
GET |
/order/:orderId |
Buscar pedido por ID |
GET |
/order/list |
Listar todos os pedidos |
PUT |
/order/:orderId |
Atualizar um pedido |
DELETE |
/order/:orderId |
Deletar um pedido |
Os testes são escritos com Vitest e cobrem os principais fluxos e regras de negócio da aplicação.
# Roda todos os testes
npm run test
# Roda os testes em watch mode
npm run test:watchO projeto conta com um workflow de Integração Contínua via GitHub Actions. A cada push, o pipeline é acionado automaticamente e executa todos os testes para garantir que nenhuma funcionalidade foi quebrada.
.github/
└── workflows/
└── ci.ymlEste projeto está licenciado sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.
Feito com ♥ por João Otávio Schonarth