Desafio Técnico - Jitterbit Jr Dev
Desafio Técnico para a posição de Dev Jr. Documentação disponivel em aqui.
Uma API RESTful construída com Node.js e Express para gerenciar pedidos com integração MongoDB e documentação automática via Swagger.
Esta API implementa um sistema completo de gerenciamento de pedidos com operações de Criar, Ler, Atualizar e Deletar (CRUD). Ela trata transformação de dados, armazena pedidos em MongoDB e fornece documentação interativa de API via Swagger UI.
Deploy em Produção: Render
- POST
/order— Criar um novo pedido - GET
/order/:id— Recuperar pedido por ID (passado como parâmetro na URL) - GET
/order/list— Listar todos os pedidos - PUT
/order/:id— Atualizar pedido por ID - DELETE
/order/:id— Deletar pedido por ID
- MongoDB para armazenamento persistente de dados
- Mongoose ODM para validação de schema e modelagem de dados
- Transformação automática de dados do formato de requisição para o banco de dados
As requisições recebidas são automaticamente transformadas:
Entrada (Request Body):
{
"numeroPedido": "v10089015vdb-01",
"valorTotal": 10000,
"dataCriacao": "2023-07-19T12:24:11.5299601+00:00",
"items": [
{
"idItem": "2434",
"quantidadeItem": 1,
"valorItem": 1000
}
]
}Armazenado no Banco (Transformado):
{
"orderId": "v10089015vdb",
"value": 10000,
"creationDate": "2023-07-19T12:24:11.529Z",
"items": [
{
"productId": 2434,
"quantity": 1,
"price": 1000
}
]
}- Swagger UI — Documentação interativa de API em
/api-docs - Variáveis de Ambiente — Configuração segura via
.env - Tratamento de Erros — Mensagens de erro compreensíveis e códigos HTTP apropriados
- Pronto para Produção — Configurado para deploy em Render
- Node.js 18.x ou superior
- MongoDB (Atlas ou instância local)
- npm ou yarn
-
Clone o repositório:
git clone https://github.com/jpsilveira11/Jitterbit-JrDev-Challenge.git cd Jitterbit-JrDev-Challenge -
Instale as dependências:
npm install
-
Crie o arquivo
.env:MONGO_URI=mongodb+srv://<usuario>:<senha>@cluster.mongodb.net/jitterbit?retryWrites=true&w=majority PORT=3000
-
Gere a documentação Swagger:
npm run swagger
-
Inicie o servidor:
npm start
A API estará rodando em http://localhost:3000 e o Swagger UI em http://localhost:3000/api-docs
POST /order
Requisição:
curl -X POST http://localhost:3000/order \
-H "Content-Type: application/json" \
-d '{
"numeroPedido": "v10089015vdb-01",
"valorTotal": 10000,
"dataCriacao": "2023-07-19T12:24:11.5299601+00:00",
"items": [
{
"idItem": "2434",
"quantidadeItem": 1,
"valorItem": 1000
}
]
}'Resposta (201 Criado):
{
"_id": "64dab8a0f6b7183237d307f6",
"orderId": "v10089015vdb",
"value": 10000,
"creationDate": "2023-07-19T12:24:11.529Z",
"items": [
{
"productId": 2434,
"quantity": 1,
"price": 1000,
"_id": "64daba7d05bcc674899dc5bf"
}
]
}GET /order/:id
Exemplo:
curl http://localhost:3000/order/v10089015vdbResposta (200 OK):
{
"_id": "64dab8a0f6b7183237d307f6",
"orderId": "v10089015vdb",
"value": 10000,
"creationDate": "2023-07-19T12:24:11.529Z",
"items": [...]
}Resposta de Erro (404 Não Encontrado):
{
"error": "Pedido não encontrado."
}GET /order/list
Exemplo:
curl http://localhost:3000/order/listResposta (200 OK):
[
{
"_id": "64dab8a0f6b7183237d307f6",
"orderId": "v10089015vdb",
"value": 10000,
"creationDate": "2023-07-19T12:24:11.529Z",
"items": [...]
},
...
]PUT /order/:id
Exemplo:
curl -X PUT http://localhost:3000/order/v10089015vdb \
-H "Content-Type: application/json" \
-d '{
"value": 15000,
"status": "completed"
}'Resposta (200 OK):
{
"_id": "64dab8a0f6b7183237d307f6",
"orderId": "v10089015vdb",
"value": 15000,
"creationDate": "2023-07-19T12:24:11.529Z",
"items": [...],
"status": "completed"
}DELETE /order/:id
Exemplo:
curl -X DELETE http://localhost:3000/order/v10089015vdbResposta (200 OK):
{
"message": "Pedido deletado com sucesso"
}A documentação interativa de API está disponível em:
- Local:
http://localhost:3000/api-docs - Produção:
https://sua-url-render.onrender.com/api-docs
Teste todos os endpoints diretamente da interface Swagger UI!
Jitterbit-JrDev-Challenge/
├── api.js # Aplicação Express principal
├── swagger.js # Configuração e geração do Swagger
├── swagger_output.json # Documentação de API gerada
├── models/
│ └── order.js # Schema Mongoose de Pedidos
├── package.json # Dependências e scripts
├── .env # Variáveis de ambiente (não no repo)
└── README.md # Este arquivo
api.js — Servidor Express com todos os endpoints CRUD e tratamento de erros
models/order.js — Schema Mongoose definindo a estrutura de Pedidos:
{
orderId: String,
value: Number,
creationDate: Date,
items: [
{
productId: Number,
quantity: Number,
price: Number
}
]
}swagger.js — Configuração que auto-gera a documentação de API
# Inicia o servidor
npm start
# Gera/regenera documentação Swagger
npm run swagger
# Executa testes
npm test- Conta MongoDB Atlas e string de conexão
- Conta GitHub com o repositório
-
Garanta que todas as mudanças estejam commitadas:
git add . git commit -m "feat: API completa de pedidos com Swagger" git push
-
Crie um Web Service no Render:
- Acesse render.com
- Entre com GitHub
- Clique em "New" → "Web Service"
- Selecione seu repositório GitHub
- Configure:
- Name:
jitterbit-order-api - Runtime: Node
- Build Command: (deixe em branco)
- Start Command:
node api.js
- Name:
-
Adicione Variáveis de Ambiente:
- No dashboard Render → Service Settings → Environment
- Adicione:
MONGO_URI= sua string de conexão MongoDB Atlas
-
Deploy:
- Clique em "Create Web Service"
- Ative "Auto-Deploy" para deploys automáticos em push no GitHub
-
Acesse:
- API:
https://sua-url.onrender.com - Swagger UI:
https://sua-url.onrender.com/api-docs
- API:
| Tecnologia | Propósito |
|---|---|
| Node.js | Runtime JavaScript |
| Express | Framework web |
| MongoDB | Banco de dados NoSQL |
| Mongoose | ODM para MongoDB |
| Swagger UI Express | Documentação interativa de API |
| Swagger AutoGen | Auto-gera specs OpenAPI |
| dotenv | Gerenciamento de variáveis de ambiente |
- ✅ Bem organizado — Separação clara de responsabilidades
- ✅ Comentado — Funções e lógica principais documentadas
- ✅ Tratamento de erros — Blocos try-catch compreensivos com mensagens significativas
- ✅ Códigos HTTP — Códigos de status apropriados para cada operação
- ✅ Convenções de nomenclatura — Nomes claros e descritivos de variáveis e funções
- ✅ Histórico Git — Commits organizados com mensagens descritivas
Crie um arquivo .env no diretório raiz (nunca commite este arquivo):
MONGO_URI=mongodb+srv://usuario:senha@cluster.mongodb.net/dbname?retryWrites=true&w=majority
PORT=3000
NODE_ENV=development- O campo
numeroPedidoé automaticamente transformado emorderIdremovendo o sufixo-01 - Datas são convertidas para formato ISO para consistência
- Todos os campos numéricos (IDs de itens, quantidades, preços) são adequadamente tipados
- A API trata requisições concorrentes com segurança usando async/await
JP Silveira
- GitHub: @jpsilveira11
- Repositório: Jitterbit-JrDev-Challenge
ISC
- API RESTful com Node.js e JavaScript
- Operações CRUD para pedidos
- Endpoints obrigatórios (Criar, Obter por ID)
- Integração MongoDB
- Transformação de dados do input para formato de banco
- Tratamento de erros e códigos HTTP apropriados
- Repositório público no GitHub
- Endpoint para listar todos os pedidos
- Endpoint para atualizar pedido
- Endpoint para deletar pedido
- Documentação Swagger/OpenAPI
- Deploy em produção (Render)
Última Atualização: 30 de Novembro de 2025 [★彡]