buy-from-me
Sumário
Descrição
Objetivo: Neste projeto foi desenvolvido uma aplicação completa com frontend em javascript e React.js, um backend em typescript e node.js e um banco de dados PostgreSQL. Essa aplicação simula um site de anúncios de produtos novos e usados.
- React.js;
- Arquitetura REST;
- Conseitos de SOLID e POO;
- Typescript e Javascript;
- Autenticações e Permissões com JWT;
- Cryptografia de senha com bcrypt;
- Banco de Dados PostgreSQL;
- Docker;
Pré-requisitos
npm version 6.14.13
node version 14.17.0
docker version 20.10.13
docker-compose version 1.29.2
Instalação
Instruções para iniciar o projeto
-
Comando para iniciar
sudo docker-compose up
Documentação
Listar usuário
GET /user/:id
Esse endpoint retorna um usuario.
- Exemplo
response body
{
"id": "e0805cfe-377e-4035-858c-7c9591b54683",
"name": "Pedro",
"lastName": "Vendedor",
"email": "pedros@email.com",
"password": "$2b$10$lG55yVCIP/AbhwBh.xmWLe8Q43gs27K6q2idJxr96YJA5odwMuYYK",
"contact": 1058685717,
"addressId": 8,
"address": {
"id": 8,
"street": "Avamarela",
"number": "500A",
"district": "Santa Barbara",
"zipcode": 321654000,
"city": "Santa Avamarela",
"statesId": 1
}
}
Logar usuário
POST /user/login
Esse endpoint retorna um usuario e um token.
-
Exemplo request body
{
{
"email": "pedros@email.com",
"password": "123456789asd"
}
}
-
Exemplo response body
{
"user": {
"id": "e0805cfe-377e-4035-858c-7c9591b54683",
"name": "Pedro",
"email": "pedros@email.com",
},
"token": "(bearer token)"
}
Registrar usuário
POST /user
Esse endpoint registra e retorna um usuario.
-
Exemplo request body
{
"name": "Pedro",
"lastName": "Vendedor",
"email": "pedros@email.com",
"password": "123456789asd",
"contact": 31123456789,
"street": "Avamarela",
"number": "500A",
"district": "Santa Barbara",
"zipcode": 321654000,
"city": "Santa Avamarela",
"statesId": 1
}
-
Exemplo response body
{
"id": "e0805cfe-377e-4035-858c-7c9591b54683",
"name": "Pedro",
"lastName": "Vendedor",
"email": "pedros@email.com",
"password": "$2b$10$lG55yVCIP/AbhwBh.xmWLe8Q43gs27K6q2idJxr96YJA5odwMuYYK",
"contact": 1058685717,
"addressId": 8,
"address": {
"id": 8,
"street": "Avamarela",
"number": "500A",
"district": "Santa Barbara",
"zipcode": 321654000,
"city": "Santa Avamarela",
"statesId": 1
}
}
Atualizar usuário
PUT /user/:id
Este endpoint atualiza e retorna os dados de um usuário.
Obs: Apenas o usuário autorizado pode atualizar.
Obs2: Os campos email, id e addressId nao podem ser atualizados.
-
Exemplo request headers
{
"Authorization": "(Bearer Token)"
}
-
Exemplo request body
{
"name": "Pedro",
"lastName": "Cinza",
"password": "123456789asd",
"contact": 31123456789,
"street": "Azul",
"number": "800C",
"district": "Sao Paulo",
"zipcode": 321654000,
"city": "Salazedo",
"statesId": 2
}
-
Exemplo response body
{
"id": "7e49fec8-f187-4b44-a9b4-a14e77adbb27",
"name": "Pedro",
"lastName": "Cinza",
"email": "pedros@email.com",
"password": "$2b$10$bQPteH3jeI3ZkdvGTGvcGOVhM1a6RTU5n4WHH4PaNQDsEyzde9uqy",
"contact": 1058685717,
"addressId": 7,
"address": {
"id": 7,
"street": "Azul",
"number": "800C",
"district": "Sao Paulo",
"zipcode": 321654000,
"city": "Salazedo",
"statesId": 2
}
}
Deletar usuário
DELETE /user/:id
Esse endpoint deleta um usuário cadastrado.
Obs: Apenas o usuário autorizado pode deletar.
Listar produto pelo id
GET /product/:id
Esse endpoint busca e retorna um produto pelo id.
- Exemplo
response body
{
"id": 1,
"name": "TV",
"description": "FullHd",
"price": 1500,
"sold": false,
"new": false,
"categoriesId": 12,
"usersId": "1"
}
Listar todos os produtos
GET /product?page=1
Esse endpoint retorna uma lista de 20 produtos por pagina.
-
Exemplo request body
{
"name": "categorie1"
}
-
Exemplo response body
[
{
"id": 1,
"name": "TV",
"description": "FullHd",
"price": 1500,
"sold": false,
"new": false,
"categoriesId": 12,
"usersId": "1"
},
{
"id": 2,
"name": "Celular",
"description": "Ifome",
"price": 2500,
"sold": false,
"new": false,
"categoriesId": 15,
"usersId": "2"
},
{
"id": 3,
"name": "TV2",
"description": "FullHd2",
"price": 1800,
"sold": false,
"new": false,
"categoriesId": 12,
"usersId": "2"
},
....
]
Listar produtos por filtro
GET /product/filter?pag=1&filter=gte&price=1500&sold=false&newP=false&category=12&name=tv
Esse endpoint lista todos os produtos em paginas de 20 resultados filtrando pelas querys.
Obs: Todos os filtros sao opcionais e podems ser usados em qualquer combinação.
Obs1: O filtro filter pode ser nos valores gte e lte, sendo gte produtos com o preço maior ou igual ao valor de price, e lte menor ou igual ao valor de price.
- Exemplo
response body
[
{
"id": 1,
"name": "TV",
"description": "FullHd",
"price": 1500,
"sold": false,
"new": false,
"categoriesId": 12,
"usersId": "1"
},
{
"id": 2,
"name": "TV 29",
"description": "LCD",
"price": 2500,
"sold": false,
"new": false,
"categoriesId": 12,
"usersId": "2"
},
]
Cria um produto
POST /product
Esse endpoint cria um produto.
-
Exemplo request headers
{
"Authorization": "(Bearer Token)"
}
-
Exemplo request body
{
"name": "Computador Gamer",
"description": "RGB e RTX3090",
"price": 10000,
"categoriesId": 1,
"usersId": "e0805cfe-377e-4035-858c-7c9591b54683",
"newProduct": true
}
-
Exemplo response body
{
"id": 17,
"name": "Computador Gamer",
"description": "RGB e RTX3090",
"price": 10000,
"sold": false,
"new": true,
"categoriesId": 1,
"usersId": "e0805cfe-377e-4035-858c-7c9591b54683"
}
Atualiza um status de um produto
PUT /product/:id/sold
Esse endpoint atualiza o status sold de um produto.
Obs: Apenas o usuario que criou o produto pode atualiza-lo.
-
Exemplo request headers
{
"Authorization": "(Bearer Token)"
}
-
Exemplo response body
{
"id": 17,
"name": "Computador Gamer",
"description": "RGB e RTX3090",
"price": 10000,
"sold": true,
"new": true,
"categoriesId": 1,
"usersId": "e0805cfe-377e-4035-858c-7c9591b54683"
}
Atualiza os dados de um produto
PUT /product/:id
Esse endpoint atualiza os dados de um produto.
Obs: Apenas o usuario que criou o produto pode atualiza-lo.
-
Exemplo request headers
{
"Authorization": "(Bearer Token)"
}
-
Exemplo request body
{
"name": "Computador Gamer",
"description": "RGB e RTX3090",
"price": 15000,
"categoriesId": 12,
"newProduct": false
}
-
Exemplo response body
{
"id": 17,
"name": "Computador Gamer",
"description": "RGB e RTX3090",
"price": 15000,
"sold": false,
"new": false,
"categoriesId": 12,
"usersId": "e0805cfe-377e-4035-858c-7c9591b54683"
}
Deleta um produto
DELETE /product/:id
Esse endpoint deleta um produto.
Obs: Apenas o usuario que criou o produto deleta-lo.
Busca um pedido
GET /order/:id
Esse endpoint retorna um pedido pelo id caso o token pertença ao comprador ou vendedor.
Obs: Apenas o usuario que criou o produto ou que fez o pedido pode acessa-lo.