Challenge 09: Relacionamentos com banco de dados no Node.js
🚀 Sobre o desafio
Nesse desafio, criamos uma nova aplicação para aprender e fixar os conhecimentos já instruídos dentro do bootcamp junto ao TypeScript, incluindo o uso de banco de dados com o TypeORM, e relacionamentos ManyToMany!
Essa será uma aplicação que deve permitir a criação de clientes, produtos e pedidos, onde o cliente pode gerar novos pedidos de compra de certos produtos, como um pequeno e-commerce.
🔨 Tecnologias:
🚀 Como rodar este projeto
Para clonar e executar este aplicativo, você precisará de Git, NodeJs Instalado em seu computador.
🌀 Clonando o repositório
# Clone este repositório
$ git clone https://github.com/ruanvalente/challenge-09-gostack-typeorm-relations
# Acesse a pasta do projeto no terminal/cmd
$ cd challenge-09-gostack-typeorm-relations
🎲 Rodando a API
# Instale as dependências
$ yarn
# Execute a Aplicação
$ yarn dev:server
# Execute o teste da Aplicação
$ yarn test
# O servidor inciará na porta:3333 - acesse http://localhost:3333
🔑 Rotas da aplicação
-
POST /customers
: A rota deve recebername
eemail
dentro do corpo da requisição, sendo oname
o nome do cliente a ser cadastrado. Ao cadastrar um novo cliente, ele deve ser armazenado dentro do seu banco de dados e deve ser retornado o cliente criado. Ao cadastrar no banco de dados, na tabelacustomers
ele deverá possuir os campos possuindo os camposname
,email
,created_at
,updated_at
. -
POST /products
: Essa rota deve recebername
,price
equantity
dentro do corpo da requisição, sendo oname
o nome do produto a ser cadastrado,price
o valor unitário equantity
a quantidade existente em estoque do produto. Com esses dados devem ser criados no banco de dados um novo produto com os seguitnes campos:name
,price
,quantity
,created_at
,updated_at
. -
POST /orders/
: Nessa rota você deve receber no corpo da requisição ocustomer_id
e um array de products, contendo oid
e aquantity
que você deseja adicionar a um novo pedido. Aqui você deve cadastrar na tabelaorder
um novo pedido, que estará relacionado aocustomer_id
informado,created_at
eupdated_at
. Já na tabelaorders_products
, você deve armazenar oproduct_id
,order_id
,price
equantity
,created_at
eupdated_at
.
{
"customer_id": "e26f0f2a-3ac5-4c21-bd22-671119adf4e9",
"products": [
{
"id": "ce0516f3-63ae-4048-9a8a-8b6662281efe",
"quantity": 5
},
{
"id": "82612f2b-3f31-40c6-803d-c2a95ef35e7c",
"quantity": 7
}
]
}
{
"id": "5cbc4aa2-b3dc-43f9-b121-44c1e416fa92",
"created_at": "2020-05-11T07:09:48.767Z",
"updated_at": "2020-05-11T07:09:48.767Z",
"customer": {
"id": "e26f0f2a-3ac5-4c21-bd22-671119adf4e9",
"name": "Rocketseat",
"email": "oi@rocketseat.com.br",
"created_at": "2020-05-11T06:20:28.729Z",
"updated_at": "2020-05-11T06:20:28.729Z"
},
"order_products": [
{
"product_id": "ce0516f3-63ae-4048-9a8a-8b6662281efe",
"price": "1400.00",
"quantity": 5,
"order_id": "5cbc4aa2-b3dc-43f9-b121-44c1e416fa92",
"id": "265b6cbd-3ab9-421c-b358-c2e2b5b3b542",
"created_at": "2020-05-11T07:09:48.767Z",
"updated_at": "2020-05-11T07:09:48.767Z"
},
{
"product_id": "82612f2b-3f31-40c6-803d-c2a95ef35e7c",
"price": "500.00",
"quantity": 7,
"order_id": "5cbc4aa2-b3dc-43f9-b121-44c1e416fa92",
"id": "ae37bcd6-7be7-47b9-b277-afee35aab4e4",
"created_at": "2020-05-11T07:09:48.767Z",
"updated_at": "2020-05-11T07:09:48.767Z"
}
]
}
GET /orders/:id
: Essa rota deve retornar as informações de um pedido específico, com todas as informações que podem ser recuperadas através dos relacionamentos entre a tabelaorders
,customers
eorders_products
.
🤔 Como contribuir para o projeto
- Faça um fork do projeto;
- Crie uma nova branch com as suas alterações:
git checkout -b my-feature
- Salve as alterações e crie uma mensagem de commit contando o que você fez:
git commit -m "feature: My new feature"
- Envie as suas alterações:
git push origin my-feature
Caso tenha alguma dúvida confira este guia de como contribuir no GitHub
📝 Licença
Este projeto esta sobe a licença MIT. Veja a LICENÇA para saber mais.
Feito com ❤️ por Ruan Valente 👋🏽