Skip to content

This is the API for PC Builder application! Made with Flask

Notifications You must be signed in to change notification settings

igormgg/pc-builder-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PC Builder API

🌐 URL base da API

Base url: https://pc-builder-api-v2.herokuapp.com/

🛠 Tecnologias utilizadas

Framework

  • Flask

Libraries

  • Flask-SQLAlchemy
  • Flask-JWT-Extended
  • gunicorn
  • pdfkit
  • python-dotenv
  • Migrations
  • Blueprints
  • Dataclasses

🛠 Instalação

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


🌄 Inicialização da API

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.



🔚 Endpoints

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.



> Usuário


Registro

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": []
  }
}

Login

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"
}

Listagem

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": []
}

Atualização

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"
}

Deleção

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.



> Categoria


Registro

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"
}

Listagem


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"
}

Atualização

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"
}

Deleção

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.



> Produtos


Registro

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"
}

Listagem

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"
  ]
}

Atualização

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"
}

Deleção

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.



> Carrinho


Registro

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
}

Listagem

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
    }
  ]
}

Deleção

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.



> Endereços


Registro

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
}

Listagem

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
  }
]

Atualização

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
}

Deleção

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.



> Pedidos

Listagem

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
    }
  ]
}

About

This is the API for PC Builder application! Made with Flask

Resources

Stars

Watchers

Forks

Packages

No packages published