Olá pessoal!
Estou muito animado em compartilhar a evolução do meu projeto final do curso de Python, o Sabor Express. Fui além do projeto original e o refatorei em uma aplicação completa, com uma API RESTful (FastAPI) e um cliente de linha de comando (CLI) interativo (Typer).
Link do GitHub: [https://github.com/YuriArduino/sabor_express]
Sobre o Projeto
A aplicação agora é dividida em duas partes principais que se comunicam:
- A API (Backend): Um servidor FastAPI que busca dados de restaurantes da web, os salva localmente em arquivos JSON e os serve através de endpoints RESTful.
- A CLI (Frontend): Uma interface de linha de comando que consome a API, permitindo ao usuário interagir com a aplicação de forma amigável e intuitiva.
A aplicação permite:
- Listar todos os restaurantes com seus dados (categoria, status).
- Visualizar o cardápio de um restaurante específico.
- Navegar pelo cardápio de forma organizada, selecionando categorias (Bebidas, Sanduíches, etc.).
- Cadastrar novos restaurantes e alterar o status dos existentes.
Toda a API possui documentação interativa via Swagger UI (/docs
) e a validação de dados é garantida pelo Pydantic.
Principais Diferenciais e Tecnologias
O foco desta refatoração foi aplicar conceitos de arquitetura de software para criar uma base sólida e escalável. Os principais diferenciais são:
- Arquitetura Limpa com
src/
Layout: O código é organizado de forma profissional, separando a lógica da aplicação dos arquivos de configuração. - Separação de Responsabilidades (API vs. CLI): A API e a interface do usuário são completamente desacopladas, comunicando-se apenas via HTTP.
- API Modular com FastAPI e
APIRouter
: Os endpoints são agrupados por recurso, tornando a API fácil de manter e expandir. - CLI Interativa e Orientada a Objetos: A CLI foi construída com Typer e classes que separam a lógica da UI (
MenuUI
) da comunicação com a API (ApiClient
). - Enriquecimento Dinâmico de Dados: Criei um módulo classificador (
classifier.py
) que analisa os itens do cardápio e atribui categorias a eles em tempo real, sem precisar modificar os dados originais. Foco na organização e praticidade, um verdadeiro desafio não tratar e preparar os dados a priori. - Gerenciamento Moderno com
pyproject.toml
: Todas as dependências, metadados e configurações de ferramentas (como Pylint) estão centralizados em um único arquivo. - Ponto de Entrada via Script (
sabor-express
): O projeto é instalável e pode ser executado com comandos simples e diretos no terminal.
Solicitações de Feedback
Gostaria muito de receber o feedback de vocês, especialmente sobre:
- Arquitetura do Projeto: A separação entre API, CLI e os módulos de utilidade (
utils
) está clara e bem definida? - Design da CLI: A abordagem com as classes
MenuApp
,ApiClient
eMenuUI
é uma boa prática para uma aplicação de terminal? - Qualidade do Código: Existem pontos onde o código poderia ser mais "Pythônico" ou eficiente?
- Ele está preparado para escalonar?Construi considerando o seguinte ambiente profissional:
- Implementar uma persistência real com um banco de dados (SQLite ou PostgreSQL).
- Adicionar testes automatizados com
pytest
. - Criar um frontend web (React, Vue) para consumir a API.
Se puderem dar uma olhada no repositório e deixar sugestões, críticas ou correções, ficarei extremamente grato.
Obrigado