Atividade para elaboração de um carrinho de compras com FastAPI e MongoDB em que trabalhamos no Bootcamp de Python do Luiza Code.
Criar um projeto Pyton que seja um conjunto de APIs REST para um carrinho de compras (itens decoração), utilizando o framework FastAPI e que tenha os seus registros salvos no banco de dados MongoDB.
- Clientes: um cliente é a pessoa que está realizando a compra de um ou mais produtos no nosso sistema.
- Produtos: Produto que o cliente deseja adquirir.
- Carrinho de compras: Informação central do projeto, em que um cliente agrupa um mais
produtos.
Os épicos estão divididos por funcionalidade. E para o processo de desenvolvimento adotamos a estratégia de branch GitFlow.
- Foi considerado o uso da IDE PyCharm para o desenvolvimento.
- Para o gerenciamento das dependências do projeto, foi utilizado a ferramenta
pip
, que tem como target o arquivo requerimentos.txt, que contém os pacotes Python solicitados e suas versões.
Em IDE diferente do Pycharm:
-
Criar venv
virtualenv venv --python=3.10
Ativar venv no Linux
source venv/bin/activate
Ativar venv no Windows
.\venv\Scripts\activate
-
Instalar requerimentos
pip install -r requirements.txt
-
Subir a aplicação
uvicorn aplicacao:main --factory
No Linux executar:
bash run.sh
No Pycharm, seguir apenas os passos de
Instalar requerimentos
eSubir a aplicação
.
- aplicacao.py: Arquivo principal do projeto. Inicia a aplicação.
Organizamos nossa aplicação em módulos e pacotes do Python, onde temos as seguintes pastas:
- decoracao: Pasta principal da aplicação.
- modelos: Módulos para declaração de modelos JSON (modelos Pydantic).
- persistencia: Módulo para persistência (repositório) com o banco de dados.
- regras: Módulos para as regras (casos de uso) da aplicação.
- rest: Módulos para controle e/ou comunicação com o FastAPI.
Dentro desses diretórios temos os arquivos:
- modelos_carrinho.py: Modelos Pydantic.
- carrinho_persistencia.py: Módulo responsável pela comunicação com o banco de dados.
- carrinho_regras.py: Regras para o cadastro, pesquisa, alterar e deletar.
- carrinho_rest.py: Rotas para as APIs (caminho URL "/cart/").
- rest_conf.py: Configurações com o FastAPI.
├── aplicacao.py
├── decoracao
│ ├── modelos
│ │ ├── __init__.py
│ │ ├── modelos_carrinho.py
│ │ ├── modelos_endereco.py
│ │ └── modelos_produtos.py
│ ├── persistencia
│ │ ├── carrinho_persistencia.py
│ │ ├── cliente_persistencia.py
│ │ ├── db.py
│ │ ├── endereco_persistencia.py
│ │ ├── __init__.py
│ │ ├── obter_colecoes.py
│ │ └── produto_persistencia.py
│ ├── regras
│ │ ├── carrinho_regras.py
│ │ ├── cliente_regras.py
│ │ └── __init__.py
│ └── rest
│ ├── carrinho_rest.py
│ ├── cliente_rest.py
│ ├── endereco_rest.py
│ ├── __init__.py
│ ├── produto_rest.py
│ └── rest_conf.py
├── requerimentos.txt
├── run.sh
└── testes
├── __init__.py
├── test_cliente.py
└── test_endereco.py
Para realizar esta atividade, escolhemos usar um servico SaaS chamado Atlas, que disponibiliza uma instância do MongoDB para persistir os dados da aplicação.
A conexão com o banco é feita atraves do módulo bd.py
.
Com os modelos para entrada e saída do pydantic utilizados pelo FastAPI, editamos o arquivo carrinho_rest.py
para trabalhar com estes modelos nas funções de criar, pesquisar, alterar e deletar.
-
Gerenciamento de Clientes
-
Cadastrar um cliente
-
Pesquisar um cliente
-
Remover um cliente
-
Cadastrar um endereço
-
Pesquisar um endereço
-
Remover um endereço
-
-
Gerenciamento de Produtos
-
Cadastrar um produto
-
Atualizar dados de um produto
-
Pesquisar um produto pelo código
-
Pesquisar um produto pelo nome
-
Remover um produto
-
-
Gerenciamento de Carrinho de Compras
-
Criar um carrinho de compras
-
Consultar um carrinho de compras aberto
-
Alterar a quantidade de itens do carrinho
-
Remover o carrinho do cliente
-
Para os testes unitários, utilizamos a bilioteca pytest
Os códigos de testes foram centralizados na pasta testes e, dentro desse diretório, um arquivo test_.py
para cada modelo de gerenciamento de entrada e saida.
-
Executar testes unitário
pytest
Ao ser criada uma solicitação de PR da branch/feature
para a branch Develop
, será excecutado de forma automática os testes unitários que foram implemtados no módulo testes
Nativamente o FastAPI já trabalha e gera o documento Swagger, usado para descrever e apresentar as APIs para que possamos testá-las ou utilizá-las em aplicações clientes.
- Como testar:
Acesse a documentação Swagger