API RESTful em Node.js para gerenciamento de pedidos, desenvolvida como solução para o teste prático da Jitterbit.
Permite criar, consultar, listar, atualizar e deletar pedidos, utilizando PostgreSQL como banco de dados.
- Node.js (ambiente de execução)
- Express (framework web)
- PostgreSQL (banco de dados relacional)
- pg (driver PostgreSQL para Node.js)
- Nodemon (hot-reloading em desenvolvimento)
- Swagger UI Express e Swagger JSDoc (documentação OpenAPI)
A API expõe endpoints para operações CRUD completas em pedidos:
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /order |
Cria um novo pedido com lista de itens |
| GET | /order/list |
Lista todos os pedidos cadastrados |
| GET | /order/:orderId |
Busca os detalhes de um pedido específico |
| PUT | /order/:orderId |
Atualiza os dados de um pedido existente |
| DELETE | /order/:orderId |
Remove um pedido e seus itens associados |
A API realiza automaticamente o mapeamento (De/Para) entre o JSON de entrada e as colunas do banco de dados.
numeroPedido→orderIdvalorTotal→valuedataCriacao→creationDateitems→ (array de itens)idItem→productIdquantidadeItem→quantityvalorItem→price
Tabela Order
orderId(VARCHAR, PK)value(DECIMAL)creationDate(TIMESTAMP)
Tabela Items
id(SERIAL, PK)orderId(VARCHAR, FK)productId(INTEGER)quantity(INTEGER)price(DECIMAL)
A documentação completa e interativa está disponível publicamente através dos links abaixo:
Visualize a especificação completa da API, schemas e endpoints. 👉 Acessar Documentação Swagger
Guia detalhado com exemplos de requisição, resposta e testes. 👉 Acessar Documentação Postman
- Node.js instalado (v14+)
- PostgreSQL instalado e rodando
- Banco de dados criado (sugestão:
orderdb)
git clone https://github.com/SEU-USUARIO/SEU-REPO.git
cd SEU-REPOnpm installCrie um arquivo .env na raiz do projeto com as configurações do seu banco:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=orderdb
DB_USER=postgres
DB_PASSWORD=sua_senha
PORT=3000
NODE_ENV=developmentExecute o script SQL abaixo no seu banco de dados PostgreSQL:
CREATE TABLE "Order" (
orderId VARCHAR(255) PRIMARY KEY,
value DECIMAL(15,2) NOT NULL,
"creationDate" TIMESTAMP WITH TIME ZONE NOT NULL
);
CREATE TABLE "Items" (
id SERIAL PRIMARY KEY,
orderId VARCHAR(255) NOT NULL,
productId INTEGER NOT NULL,
quantity INTEGER NOT NULL,
price DECIMAL(15,2) NOT NULL,
FOREIGN KEY (orderId) REFERENCES "Order"(orderId) ON DELETE CASCADE
);
CREATE INDEX idx_items_orderId ON "Items"(orderId);npm run devO servidor estará rodando em: http://localhost:3000
Se preferir, você pode acessar a documentação Swagger localmente enquanto o servidor estiver rodando:
👉 http://localhost:3000/docs
Request:
{
"numeroPedido": "v10089015vdb-01",
"valorTotal": 10000,
"dataCriacao": "2023-07-19T12:24:11.5299601+00:00",
"items": [
{
"idItem": "2434",
"quantidadeItem": 1,
"valorItem": 1000
}
]
}Response (201 Created):
{
"success": true,
"data": {
"numeroPedido": "v10089015vdb-01",
"valorTotal": "10000.00",
"dataCriacao": "2023-07-19T12:24:11.529Z",
"items": [
{
"idItem": "2434",
"quantidadeItem": 1,
"valorItem": 1000
}
]
},
"message": "Pedido criado com sucesso"
}Desenvolvido como parte do processo seletivo Jitterbit.