Base url: https://pc-builder-api-v2.herokuapp.com/
- Flask
- Flask-SQLAlchemy
- Flask-JWT-Extended
- gunicorn
- pdfkit
- python-dotenv
- Migrations
- Blueprints
- Dataclasses
Caso queira instalar a API para rodar os testes localmente em sua máquina, siga os seguintes passos:
1 - Instale um ambiente virtual (venv
) na raíz do projeto
$ python -m venv venv && source venv/bin/activate
2 - Instale as dependências presentes no arquivo requirements.txt
:
: no terminal :
$ pip install -r requirements.txt
2 - Em seguida, inicie a aplicação flask:
: no terminal :
$ flask run
Para começar a utilizar a API, copie a URL base da aplicação e use-a na sua ferramenta cliente de API de preferência (recomendo o Insomnia), complementando a URL com os endopints da aplicação, explicados a seguir.
Existem 25 endpoints nessa aplicação: 5 para gerenciamento de usuário, 5 para gerenciamento de categorias, 5 para gerenciamento de produtos, 4 para gerenciamento de carrinho, 4 para gerenciamento de endereços, 2 para gerenciamento de pedidos.
POST /user/register
Essa rota serve para registrar um novo usuário no banco de dados, sendo obrigatório passar no corpo da requisição o nome, email, telefone e cpf do usuário a registrar.
Exemplo de requisição:
{
"name": "John Doe",
"email": "[email protected]",
"password": "doe.john",
"cpf": "55555555555"
}
Dessa requisição é esperado um retorno com os dados do usuário cadastrado, como mostrado a seguir:
{
"user_id": 1,
"name": "John Doe",
"email": "[email protected]",
"cpf": "55555555555",
"addresses": [],
"orders": [],
"cart": {
"total": 0.0,
"products": []
}
}
POST /user/login
Essa rota serve para fazer login de um usuário já cadastrado no banco de dados, sendo obrigatório passar no corpo da requisição o email, e senha do usuário.
Para fazer login, o usuário cadastrado deve confirmar o email que foi registrado na rota de registro.
Exemplo de requisição:
{
"email": "[email protected]",
"password": "doe.john"
}
Dessa requisição é esperado um retorno com o token de acesso do usuário, como mostrado a seguir:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTY0NjQxODA3NCwianRpIjoiNWE0ZDgzODMtZThlNS00MWYzLWEwMDItN2ZlODQzOTg0YzI5IiwidHlwZSI6ImFjY2VzcyIsInN1YiI6eyJ1c2VyX2lkIjo1LCJuYW1lIjoiSm9obiBEb2UiLCJlbWFpbCI6ImpvaG5AZW1haWwuY29tIiwicGFzc3dvcmRfaGFzaCI6InBia2RmMjpzaGEyNTY6MjYwMDAwJGEwTHBMOTJkdWE4ZkVTJDhlMDI3NzgwZTI5NzBiZDkxYTdiMWRjOTg0YWY4ZmJlODdkN2NjODNhODcwMWZhNzY5OWNhOTlhNjY2NWExY2UiLCJjcGYiOiI1NTU1NTU1NTU1NSIsImFkZHJlc3NlcyI6W10sIm9yZGVycyI6W119LCJuYmYiOjE2NDY0MTgwNzQsImV4cCI6MTY0NjUwNDQ3NH0.6X5CEa9cCiauP3qjy7eKvDsVMHr2DGpkPFrRI3YFtRw"
}
GET /user
Essa rota é usada para obter os dados do usuário que está logado, cadastrado no banco de dados.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas uma autorização do tipo bearer token, obtida no login do usuário.
Exemplo de resposta dessa rota:
{
"user_id": 1,
"name": "John Doe",
"email": "[email protected]",
"cpf": "55555555555",
"addresses": [],
"orders": []
}
PATCH /user
Já a rota patch /user pode ser usada para atualizar qualquer informação do usuário que está logado, bastando passar no corpo da requisição o dado a ser atualizado, e passar na autorização o bearer token do usuário logado, obtido no login
Exemplo de requisição:
{
"email": "[email protected]"
}
Exemplo de resposta dessa rota:
{
"name": "John Doe",
"email": "[email protected]",
"password": "doe.john",
"cpf": "55555555555"
}
DELETE /user
Por último, a requisição DELETE /user pode ser usada para deletar um usuário específico do banco de dados.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas uma autorização do tipo bearer token, obtida no login do usuário.
A requisição bem sucedida retorna a resposta 204, sem conteúdo.
POST /categories
Essa rota serve para registrar uma nova categoria no banco de dados, sendo obrigatório passar no corpo da requisição o nome da categoria a registrar.
Essa rota é protegida pela autorização bearer token de administrador.
Exemplo de requisição:
{
"name": "Processadores"
}
Dessa requisição é esperado um retorno com os dados da categoria cadastrada, como mostrado a seguir:
{
"category_id": 1,
"name": "Processadores"
}
GET /categories
Essa rota é usada para obter as categorias cadastradas no banco de dados.
Aqui não é necessário passar nenhum dado no corpo da requisição.
Essa rota é protegida pela autorização bearer token de administrador.
Exemplo de resposta dessa requisição:
[
{
"category_id": 1,
"name": "Processadores"
},
{
"category_id": 2,
"name": "Periféricos"
}
]
GET /categories/<id>
Essa rota é usada para obter a categoria referente ao id passado na url.
Aqui não é necessário passar nenhum dado no corpo da requisição.
Essa rota é protegida pela autorização bearer token de administrador.
Exemplo de resposta dessa requisição:
{
"category_id": 1,
"name": "Processadores"
}
PATCH /categories/<id>
Já essa rota pode ser usada para atualizar o nome da categoria referente ao id passado na url, bastando passar no corpo da requisição o dado a ser atualizado.
Aqui não é necessário passar nenhum dado no corpo da requisição.
Essa rota é protegida pela autorização bearer token de administrador.
Exemplo de requisição:
{
"name": "Armazenamentos"
}
Exemplo de resposta dessa rota:
{
"category_id": 1,
"name": "Armazenamentos"
}
DELETE /categories/<\id>
Por último, essa requisição pode ser usada para deletar uma categoria específica do banco de dados.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas a id da categoria na url da requisição.
Essa rota é protegida pela autorização bearer token de administrador.
A requisição bem sucedida retorna a resposta 204, sem conteúdo.
POST /products
Essa rota serve para registrar um novo produto no banco de dados, sendo obrigatório passar no corpo da requisição o model, img, price, description, e category do produto a registrar.
Essa rota é protegida pela autorização bearer token de administrador.
Exemplo de requisição:
{
"model": "Processador AMD Ryzen 5 3600, AM4, 3.6GHz",
"img": "www.img.com.br",
"price": 1678.31,
"description": "Marca: AMD, Modelo: Ryzen 5 3600, Cores: 6, Threads: 12, Socket: AM4, Base Clock: 3.6, Cooler Box: Incluso, GPU Integrada: Não, Consumo: 65 Watts",
"category": "Processadores"
}
Dessa requisição é esperado um retorno com os dados do produto cadastrado, como mostrado a seguir:
{
"product_id": 1,
"model": "Processador AMD Ryzen 5 3600, AM4, 3.6GHz",
"img": "www.img.com.br",
"price": 1678.31,
"description": "Marca: AMD, Modelo: Ryzen 5 3600, Cores: 6, Threads: 12, Socket: AM4, Base Clock: 3.6, Cooler Box: Incluso, GPU Integrada: Não, Consumo: 65 Watts"
}
GET /products
Essa rota é usada para obter todos os produtos cadastrados no banco de dados.
Aqui não é necessário passar nenhum dado no corpo da requisição.
Essa rota é protegida pela autorização bearer token de administrador.
Exemplo de resposta dessa requisição:
[
{
"product_id": 1,
"model": "Processador AMD Ryzen 5 3600, AM4, 3.6GHz",
"img": "www.img.com.br",
"price": 1678.31,
"description": [
"Marca: AMD",
"Modelo: Ryzen 5 3600",
"Cores: 6",
"Threads: 12",
"Socket: AM4",
"Base Clock: 3.6",
"Cooler Box: Incluso",
"GPU Integrada: Não",
"Consumo: 65 Watts"
]
}
]
GET /products/<id>
Essa rota é usada para obter o produto referente ao id passado na url.
Aqui não é necessário passar nenhuma autorização, e nenhum dado no corpo da requisição.
Essa rota é protegida pela autorização bearer token de administrador.
Exemplo de resposta dessa requisição:
{
"product_id": 1,
"model": "Processador AMD Ryzen 5 3600, AM4, 3.6GHz",
"img": "www.img.com.br",
"price": 1678.31,
"description": [
"Marca: AMD",
"Modelo: Ryzen 5 3600",
"Cores: 6",
"Threads: 12",
"Socket: AM4",
"Base Clock: 3.6",
"Cooler Box: Incluso",
"GPU Integrada: Não",
"Consumo: 65 Watts"
]
}
PATCH /products/<id>
Já essa rota pode ser usada para atualizar as informações do produto referente ao id passado na url, bastando passar no corpo da requisição o dado a ser atualizado.
Aqui não é necessário passar nenhuma autorização, e nenhum dado no corpo da requisição.
Exemplo de requisição:
{
"model": "Processador AMD Ryzen 7 5800X, AM4, 3.8GHz",
"description": "Marca: AMD, Modelo: Ryzen 7 5800X, Cores: 8, Threads: 16, Socket: AM4, Base Clock: 3.8, Cooler Box: Incluso, GPU Integrada: Não, Consumo: 105 Watts"
}
Exemplo de resposta dessa rota:
{
"product_id": 1,
"model": "Processador AMD Ryzen 7 5800X, AM4, 3.8GHz",
"img": "www.img.com.br",
"price": 1678.31,
"description": "Marca: AMD, Modelo: Ryzen 7 5800X, Cores: 8, Threads: 16, Socket: AM4, Base Clock: 3.8, Cooler Box: Incluso, GPU Integrada: Não, Consumo: 105 Watts"
}
DELETE /products/<\id>
Por último, essa requisição pode ser usada para deletar um produto específico do banco de dados.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas a id do produto na url da requisição.
A requisição bem sucedida retorna a resposta 204, sem conteúdo.
POST /cart/<id>
Essa rota serve para registrar um novo produto no carrinho do usuário logado.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas uma autorização do tipo bearer token, obtida no login do usuário, e a id do produto a registrar no carrinho na url da requisição.
A requisição bem sucedida retorna o produto que foi adicionado ao carrinho.
Exemplo de resposta da requisição:
{
"product_id": 2,
"model": "Processador AMD Ryzen 5 3600, AM4, 3.6GHz",
"img": "www.img.com.br",
"price": 1678.31,
"description": "Marca: AMD, Modelo: Ryzen 5 3600, Cores: 6, Threads: 12, Socket: AM4, Base Clock: 3.6, Cooler Box: Incluso, GPU Integrada: Não, Consumo: 65 Watts"
}
POST /cart/checkout
Essa rota apaga os produtos do carrinho do usuário, transferindo-os para os pedidos (orders) do usuário.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas uma autorização do tipo bearer token, obtida no login do usuário.
A requisição bem sucedida retorna o pedido (order) do usuário com o preço total, e a data do pedido.
Exemplo de resposta da requisição:
{
"order_id": 2,
"total": 1678.31,
"timestamp": "Tue, 08 Mar 2022 12:09:43 GMT",
"user_id": 22
}
GET /cart
Essa rota é usada para obter todos os produtos adicionados no carrinho do usuário logado.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas uma autorização do tipo bearer token, obtida no login do usuário.
Exemplo de resposta da requisição:
{
"total": 1678.31,
"products": [
{
"model": "Processador AMD Ryzen 5 3600, AM4, 3.6GHz",
"price": 1678.31,
"img": "www.img.com.br",
"description": "Marca: AMD, Modelo: Ryzen 5 3600, Cores: 6, Threads: 12, Socket: AM4, Base Clock: 3.6, Cooler Box: Incluso, GPU Integrada: Não, Consumo: 65 Watts",
"product_id": 2
}
]
}
DELETE /cart/<\id>
Por último, essa requisição pode ser usada para deletar um produto específico do carrinho.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas uma autorização do tipo bearer token, obtida no login do usuário, e a id do produto a registrar no carrinho na url da requisição.
A requisição bem sucedida retorna a resposta 204 - sem conteúdo.
POST /address
Essa rota serve para registrar um novo endereço ao usuário logado, sendo obrigatório passar no corpo da requisição o cep, cidade, estado, logradouro, e numero do endereço a registrar, além de uma autorização do tipo bearer token, obtida no login do usuário.
Exemplo de requisição:
{
"cep": "20221410",
"cidade": "Rio de Janeiro",
"estado": "RJ",
"logradouro": "Rua Alexandre Mackenzie",
"numero": 15
}
Dessa requisição é esperado um retorno com os dados do endereço cadastrado, como mostrado a seguir:
{
"zip_code": "20221410",
"state": "RJ",
"city": "Rio de Janeiro",
"public_place": "Rua Alexandre Mackenzie",
"number": 15
}
GET /address
Essa rota é usada para obter todos os endereços cadastrados para o usuário logado.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas uma autorização do tipo bearer token, obtida no login do usuário.
Exemplo de resposta dessa requisição:
[
{
"address_id": 9,
"zip_code": "20221410",
"state": "RJ",
"city": "Rio de Janeiro",
"public_place": "Rua Alexandre Mackenzie",
"number": 15
}
]
PUT /address/<id>
Já essa rota pode ser usada para atualizar as informações do endereço referente ao id passado na url, bastando passar no corpo da requisição o endereço inteiro a ser atualizado, com os campos obrigatórios zip_code, state, city, public_place e number.
Aqui também é necessário passar uma autorização do tipo bearer token, obtida no login do usuário.
Essa rota devolve a resposta 204 - sem conteúdo.
Exemplo de requisição:
{
"zip_code": "20221410",
"state": "RJ",
"city": "Rio de Janeiro",
"public_place": "Rua Vinicius de Morais",
"number": 25
}
DELETE /address/<\id>
Por último, essa requisição pode ser usada para deletar um endereço específico cadastrado para o usuário logado.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas a id do produto na url da requisição e uma autorização do tipo bearer token, obtida no login do usuário.
A requisição bem sucedida retorna a resposta 204 - sem conteúdo.
GET /orders
Essa rota é usada para obter todos os pedidos do usuário logado.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas uma autorização do tipo bearer token, obtida no login do usuário.
Exemplo de resposta dessa requisição:
[
{
"order_id": 1,
"total": 1678.31,
"timestamp": "Tue, 08 Mar 2022 12:06:22 GMT",
"user_id": 22
},
{
"order_id": 2,
"total": 1678.31,
"timestamp": "Tue, 08 Mar 2022 12:09:43 GMT",
"user_id": 22
}
]
GET /orders/<id>
Essa rota é usada para obter o pedido do usuário logado, referente ao id passado na url.
Aqui não é necessário passar nenhum dado no corpo da requisição, apenas a id do produto na url da requisição e uma autorização do tipo bearer token, obtida no login do usuário.
Exemplo de resposta dessa requisição:
{
"order_id": 1,
"total": 1678.31,
"timestamp": "Tue, 08 Mar 2022 12:06:22 GMT",
"user_id": 22,
"products": [
{
"model": "Processador AMD Ryzen 5 3600, AM4, 3.6GHz",
"price": 1678.31,
"img": "www.img.com.br",
"description": "Marca: AMD, Modelo: Ryzen 5 3600, Cores: 6, Threads: 12, Socket: AM4, Base Clock: 3.6, Cooler Box: Incluso, GPU Integrada: Não, Consumo: 65 Watts",
"product_id": 2
}
]
}