Este projeto Ʃ um sistema de gerenciamento de pedidos de compra que opera com quatro entidades principais: UsuƔrios, Produtos, Ordens de Compra e Itens de Ordem de Compra.
O sistema fornece uma variedade de rotas para gerenciar essas entidades. As rotas de UsuĆ”rios permitem a criaĆ§Ć£o, listagem, atualizaĆ§Ć£o e exclusĆ£o de usuĆ”rios. As rotas de Produtos permitem a criaĆ§Ć£o, listagem, busca por ID, atualizaĆ§Ć£o e exclusĆ£o de produtos, com suporte para filtros e paginaĆ§Ć£o na listagem de produtos. As rotas de Ordens de Compra permitem a geraĆ§Ć£o de uma ordem de compra para um usuĆ”rio e a listagem das ordens de compra de um usuĆ”rio com a possibilidade de aplicar filtros. AlĆ©m disso, hĆ” uma rota para a geraĆ§Ć£o de um item para uma ordem de compra.
Em resumo, este projeto oferece um sistema robusto e flexĆvel para o gerenciamento de pedidos de compra, proporcionando uma ampla gama de funcionalidades para atender Ć s necessidades dos usuĆ”rios
- typeorm
- reflect-metadata
- ts-node
- pg
- express
- express-async-errors
- zod
- bcryptjs
- dotenv
- Clone o repositĆ³rio
git clone <URL-GITHUB>
- Criar banco de dados postegres
Conectado no terminal interativo do PostgreSQL (psql)
psql -U postgres
Postgres user default password
1234
Create Database
CREATE DATABASE <name-your-database> ;
desconectar terminal interativo do PostgreSQL
ctrl + c
- Criar arquivo .env
DATABASE_URL="postgres://<USER>:<PASS>@<HOST>:<PORT>/<DATABASE>"
SECRET_KEY="#%$*&**&&-09875$hddsa%TT"
- exemplo:
DATABASE_URL="postgresql://postgres:1234@localhost:5432/db_store"
- Executar MigraƧoens
npm run typeorm migration:run -- -d ./src/data-source
- Instale a node modules
npm install
- Rodar servidor
npm run dev
localhost:3000
MĆ©todo | Endpoint | Responsabilidade |
---|---|---|
POST | /users | CriaĆ§Ć£o de usuĆ”rio |
GET | /users | Lista todos os usuƔrios |
GET | /users/:id | Lista um usuƔrio com ordes de compras e filtros |
PATCH | /users/:id | Atualiza um usuƔrio |
DELETE | /users/:id | Deleta um usuƔrio |
POST | /products | CriaĆ§Ć£o de produto |
GET | /products | Lista todos os produtos, com filtros e paginaĆ§Ć£o |
GET | /products/:id | Busca um produto pelo id |
PATCH | /products/:id | Atualiza um produto |
DELETE | /products/:id | Deleta um produto |
POST | /purchaseOrder | Gerar ordem de compra, de um usuƔrio |
GET | /purchaseOrder/users/:id | Listar ordem de compra, de um usuƔrio, com filtros |
POST | /purchaseOrder/item | Gerar item para um ordem de compra |
GET /products
- FORMATO DA REQUISIĆĆO, SEM PAGINAĆĆO E SEM FILTROS
Resposta: status 200
{
"page": null,
"perPage": null,
"data": [
{
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": 59.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
},
{
"id": "81b46858-2d5f-4980-864d-70656e858791",
"title": "B Tester",
"price": 69.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
},
{
"id": "befed5e5-734a-4a1c-99cd-966348df1bf0",
"title": "c Tester",
"price": 7.89,
"description": "tester description",
"category": "food",
"image": "urlfakesjdjfs"
},
{
"id": "f21eb44c-3eab-4c69-8778-f9ad8071510c",
"title": "D Tester",
"price": 7.89,
"description": "tester description",
"category": "food",
"image": "urlfakesjdjfs"
}
]
}
GET /products?filters[category]=electronics
- FORMATO DA REQUISIĆĆO, SEM PAGINAĆĆO E COM FILTRO
Resposta: status 200
{
"page": null,
"perPage": null,
"data": [
{
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": 59.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
},
{
"id": "81b46858-2d5f-4980-864d-70656e858791",
"title": "B Tester",
"price": 69.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
}
]
}
GET /products?page=1&perPage=3
- FORMATO DA REQUISIĆĆO, COM PAGINAĆĆO E SEM FILTROS
Resposta: status 200
{
"page": 1,
"perPage": 3,
"data": [
{
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": 59.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
},
{
"id": "81b46858-2d5f-4980-864d-70656e858791",
"title": "B Tester",
"price": 69.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
},
{
"id": "befed5e5-734a-4a1c-99cd-966348df1bf0",
"title": "c Tester",
"price": 7.89,
"description": "tester description",
"category": "food",
"image": "urlfakesjdjfs"
}
]
}
GET /products?page=1&perPage=3&filters[category]=electronics
- FORMATO DA REQUISIĆĆO, COM PAGINAĆĆO E COM FILTRO
Resposta: status 200
{
"page": 1,
"perPage": 3,
"data": [
{
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": 59.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
},
{
"id": "81b46858-2d5f-4980-864d-70656e858791",
"title": "B Tester",
"price": 69.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
}
]
}
GET /products?page=1&perPage=3&filters[category]=electronics&filters[price]=69.99
- FORMATO DA REQUISIĆĆO, COM PAGINAĆĆO E COM FILTROS MULTIPLOS
Resposta: status 200
{
"page": 1,
"perPage": 3,
"data": [
{
"id": "81b46858-2d5f-4980-864d-70656e858791",
"title": "B Tester",
"price": 69.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
}
]
}
GET /products/60096951-81d5-4569-ae70-c2deed1d9d43
-- FORMATO DA REQUISIĆĆO
NĆ£o necessita corpo de requisiĆ§Ć£o
Resposta: status 200
{
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": 59.99,
"description": "Product, A Tester, update ",
"category": "electronics",
"image": "urlfakesjdjfs"
}
POST /products
-- FORMATO DA REQUISIĆĆO
Corpo:
{
"title": "A Tester",
"price": 59.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
}
Resposta: status 201
{
"title": "A Tester",
"price": 59.99,
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs",
"id": "60096951-81d5-4569-ae70-c2deed1d9d43"
}
PATCH /products/60096951-81d5-4569-ae70-c2deed1d9d43
-- FORMATO DA REQUISIĆĆO
Corpo:
{
"description": "Product, A Tester, update "
}
Resposta: status 200
{
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": 59.99,
"description": "Product, A Tester, update ",
"category": "electronics",
"image": "urlfakesjdjfs"
}
DELETE - /products/86bc6ac6-6762-4fb6-8256-e5b462e8b1c1
-- FORMATO DA REQUISIĆĆO
NĆ£o necessita corpo de requisiĆ§Ć£o
Resposta: status 204
POST /users
-- FORMATO DA REQUISIĆĆO
Corpo:
{
"email": "tester.a@gmail.com",
"username": "Tester 1000",
"password": "1234",
"first_name": "Tester",
"last_name": "1000"
}
Resposta: status 201
{
"id": "76438565-cb26-439f-a423-63816a7fb810",
"email": "tester.a@gmail.com",
"username": "Tester 1000",
"first_name": "Tester",
"last_name": "1000"
}
PATCH /users/76438565-cb26-439f-a423-63816a7fb810
-- FORMATO DA REQUISIĆĆO
Corpo:
{
"email": "tester.update@gmail.com"
}
Resposta: status 200
{
"id": "76438565-cb26-439f-a423-63816a7fb810",
"email": "tester.update@gmail.com",
"username": "Tester 1000",
"first_name": "Tester",
"last_name": "1000"
}
GET - /users
-- FORMATO DA REQUISIĆĆO
NĆ£o necessita corpo de requisiĆ§Ć£o
Resposta: status 200
[
{
"id": "07eeb39a-3ad0-4632-9f86-bafffb3796d4",
"email": "varela.a@gmail.com",
"username": "KVA",
"first_name": "Krishna",
"last_name": "Varela"
},
{
"id": "76438565-cb26-439f-a423-63816a7fb810",
"email": "tester.update@gmail.com",
"username": "Tester 1000",
"first_name": "Tester",
"last_name": "1000"
}
]
GET - /users/07eeb39a-3ad0-4632-9f86-bafffb3796d4
-- FORMATO DA REQUISIĆĆO, SEM FILTROS
NĆ£o necessita corpo de requisiĆ§Ć£o
Resposta: status 200
{
"id": "07eeb39a-3ad0-4632-9f86-bafffb3796d4",
"email": "varela.a@gmail.com",
"username": "KVA",
"password": "$2a$10$PGmOGq7C82x/TMqs2x9F5eCNuKci2vr7Fudczv5Fdx9ofxJHkXedi",
"first_name": "Krishna",
"last_name": "Varela",
"purchase_orders": [
{
"id": "054a4479-11cf-4c98-9bc6-ea6b35aff881",
"date": "2024-02-02",
"items": [
{
"id": "f16928be-963a-4739-9903-06e098542ab6",
"quantity": 2,
"price": "119.98"
},
{
"id": "4439758c-d89e-4b7e-b602-e0da11c87298",
"quantity": 5,
"price": "39.45"
}
]
},
{
"id": "d01dd31d-d308-46b8-8707-b151d6a92734",
"date": "2024-02-04",
"items": []
},
{
"id": "8cc5cbb7-befe-40d9-8cb3-3959fee0b9a3",
"date": "2024-02-04",
"items": []
},
{
"id": "10eb13ec-9883-4275-b140-6fc72e8e7ac1",
"date": "2024-02-04",
"items": []
},
{
"id": "f9e5c293-06e5-4cb9-b752-90768047803c",
"date": "2024-02-02",
"items": []
},
{
"id": "2dbb1953-2ece-45b4-9a13-39c6d9ea94fc",
"date": "2024-02-04",
"items": []
}
]
}
GET - /users/07eeb39a-3ad0-4632-9f86-bafffb3796d4?filters={"date":"2024-02-02"}
-- FORMATO DA REQUISIĆĆO, COM FILTROS
NĆ£o necessita corpo de requisiĆ§Ć£o
Resposta: status 200
{
"id": "07eeb39a-3ad0-4632-9f86-bafffb3796d4",
"email": "varela.a@gmail.com",
"username": "KVA",
"password": "$2a$10$PGmOGq7C82x/TMqs2x9F5eCNuKci2vr7Fudczv5Fdx9ofxJHkXedi",
"first_name": "Krishna",
"last_name": "Varela",
"purchase_orders": [
{
"id": "054a4479-11cf-4c98-9bc6-ea6b35aff881",
"date": "2024-02-02",
"items": [
{
"id": "f16928be-963a-4739-9903-06e098542ab6",
"quantity": 2,
"price": "119.98"
},
{
"id": "4439758c-d89e-4b7e-b602-e0da11c87298",
"quantity": 5,
"price": "39.45"
}
]
},
{
"id": "f9e5c293-06e5-4cb9-b752-90768047803c",
"date": "2024-02-02",
"items": []
}
]
}
DELETE - /users/76438565-cb26-439f-a423-63816a7fb810
-- FORMATO DA REQUISIĆĆO
NĆ£o necessita corpo de requisiĆ§Ć£o
Resposta: status 204
POST /purchaseOrder
-- FORMATO DA REQUISIĆĆO
Corpo:
{
"user_id": "07eeb39a-3ad0-4632-9f86-bafffb3796d4"
}
Resposta: status 201
{
"user": {
"id": "07eeb39a-3ad0-4632-9f86-bafffb3796d4",
"email": "varela.a@gmail.com",
"username": "KVA",
"password": "$2a$10$PGmOGq7C82x/TMqs2x9F5eCNuKci2vr7Fudczv5Fdx9ofxJHkXedi",
"first_name": "Krishna",
"last_name": "Varela"
},
"id": "054a4479-11cf-4c98-9bc6-ea6b35aff881",
"date": "2024-02-02T16:52:52.192Z"
}
GET /purchaseOrder/users/07eeb39a-3ad0-4632-9f86-bafffb3796d4
-- FORMATO DA REQUISIĆĆO SEM FILTROS
Resposta: status 200
[
{
"id": "054a4479-11cf-4c98-9bc6-ea6b35aff881",
"date": "2024-02-02",
"items": [
{
"id": "f16928be-963a-4739-9903-06e098542ab6",
"quantity": 2,
"price": "119.98",
"product": {
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": "59.99",
"description": "Product, A Tester, update ",
"category": "electronics",
"image": "urlfakesjdjfs"
}
},
{
"id": "4439758c-d89e-4b7e-b602-e0da11c87298",
"quantity": 5,
"price": "39.45",
"product": {
"id": "befed5e5-734a-4a1c-99cd-966348df1bf0",
"title": "c Tester",
"price": "7.89",
"description": "tester description",
"category": "food",
"image": "urlfakesjdjfs"
}
}
]
},
{
"id": "d01dd31d-d308-46b8-8707-b151d6a92734",
"date": "2024-02-04",
"items": []
},
{
"id": "8cc5cbb7-befe-40d9-8cb3-3959fee0b9a3",
"date": "2024-02-04",
"items": []
},
{
"id": "10eb13ec-9883-4275-b140-6fc72e8e7ac1",
"date": "2024-02-04",
"items": []
},
{
"id": "f9e5c293-06e5-4cb9-b752-90768047803c",
"date": "2024-02-02",
"items": []
},
{
"id": "2dbb1953-2ece-45b4-9a13-39c6d9ea94fc",
"date": "2024-02-04",
"items": []
}
]
GET /purchaseOrder/users/07eeb39a-3ad0-4632-9f86-bafffb3796d4?filters={"id":"054a4479-11cf-4c98-9bc6-ea6b35aff881"}
-- FORMATO DA REQUISIĆĆO COM FILTROS
Resposta: status 200
[
{
"id": "054a4479-11cf-4c98-9bc6-ea6b35aff881",
"date": "2024-02-02",
"items": [
{
"id": "f16928be-963a-4739-9903-06e098542ab6",
"quantity": 2,
"price": "119.98",
"product": {
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": "59.99",
"description": "Product, A Tester, update ",
"category": "electronics",
"image": "urlfakesjdjfs"
}
},
{
"id": "4439758c-d89e-4b7e-b602-e0da11c87298",
"quantity": 5,
"price": "39.45",
"product": {
"id": "befed5e5-734a-4a1c-99cd-966348df1bf0",
"title": "c Tester",
"price": "7.89",
"description": "tester description",
"category": "food",
"image": "urlfakesjdjfs"
}
}
]
}
]
POST /purchaseOrder/item
-- FORMATO DA REQUISIĆĆO
Corpo:
{
"product_id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"purchase_order_id": "054a4479-11cf-4c98-9bc6-ea6b35aff881",
"quantity": 2
}
Resposta: status 201
{
"quantity": 2,
"price": 119.98,
"product": {
"id": "60096951-81d5-4569-ae70-c2deed1d9d43",
"title": "A Tester",
"price": "59.99",
"description": "tester description",
"category": "electronics",
"image": "urlfakesjdjfs"
},
"purchaseOrder": {
"id": "054a4479-11cf-4c98-9bc6-ea6b35aff881",
"date": "2024-02-02T16:52:52.192Z"
},
"id": "f16928be-963a-4739-9903-06e098542ab6"
}