Skip to content

conceicao-peres/shopcart

Repository files navigation

API Shop Cart

Projeto Final do treinamento de Python para o < LuizaCode >

Atividade para elaboração de um carrinho de compras com FastAPI e MongoDB em que trabalhamos no Bootcamp de Python do Luiza Code.

Objetivo

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.

As informações que temos no projetos são:

  • 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.

Apresentação das atividades

Os épicos estão divididos por funcionalidade. E para o processo de desenvolvimento adotamos a estratégia de branch GitFlow.

1 - Criação do ambiente

  • 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.

Como executar

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 e Subir a aplicação.


2 - Organização da 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:

├── 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

3 - Conectando no banco de dados

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.

4 - Modelando e ajeitando a camada REST

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.

Requisitos Funcionais:

  • 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

5 - Testes unitários

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

Pipeline de Build e Testes

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

img.png

Documentação OpenAPI

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.

About

Projeto Final - Luiza<code>

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages