- Notifications
You must be signed in to change notification settings - Fork0
Desafio Técnico - Jitterbit Jr Dev
jpsilveira11/Jitterbit-JrDev-Challenge
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Desafio Técnico - Jitterbit Jr Dev
Desafio Técnico para a posição de Dev Jr.Documentação disponivel emaqui.
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.gitcd Jitterbit-JrDev-ChallengeInstale as dependências:
npm install
Crie o arquivo
.env:MONGO_URI=mongodb+srv://<usuario>:<senha>@cluster.mongodb.net/jitterbit?retryWrites=true&w=majorityPORT=3000
Gere a documentação Swagger:
npm run swagger
Inicie o servidor:
npm start
A API estará rodando emhttp://localhost:3000 e o Swagger UI emhttp://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/v10089015vdb
Resposta (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/list
Resposta (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/v10089015vdb
Resposta (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 arquivoapi.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 servidornpm start# Gera/regenera documentação Swaggernpm run swagger# Executa testesnpmtest
- 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:
- Acesserender.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=majorityPORT=3000NODE_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 [★彡]
About
Desafio Técnico - Jitterbit Jr Dev
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.