Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Projeto] Avaliação do Projeto - Saborexpress API (curso Python 3)

Olá pessoal

Estou compartilhando minha implementação do projeto final do Curso Python 3, a Saborexpress API, uma API RESTful desenvolvida com FastAPI para gerenciar restaurantes, avaliações e cardápios com persistência em JSON.

Link do GitHub:https://github.com/carlosvblessa/curso-python-3


Sobre o Projeto

A aplicação permite realizar operações completas sobre restaurantes, como:

  • Cadastrar, listar e alternar estado dos restaurantes
  • Registrar avaliações por clientes
  • Adicionar itens ao cardápio (pratos, bebidas e sobremesas)
  • Aplicar descontos específicos por tipo de item:
    • Prato: 5%
    • Bebida: 8%
    • Sobremesa: 15%

Todos os dados são persistidos em dados/restaurantes.json.

A API possui documentação interativa via Swagger UI (/docs) e ReDoc (/redoc), com validação via Pydantic.


Funcionalidades Implementadas

  • CRUD básico de restaurantes
  • Avaliações com validação de nota (1–5)
  • Cardápio com herança e polimorfismo entre tipos de itens
  • Desconto específico por tipo de item
  • Persistência de dados em JSON
  • Testes automatizados com cobertura de 94%
  • Boas práticas de código com PEP 8, type hints, mypy e pre-commit

Solicitações de Feedback

Gostaria de receber feedback sobre:

  • Arquitetura e organização do código (Clean Architecture)
  • Uso correto de herança, polimorfismo e classe abstrata
  • Estruturação dos endpoints da API e uso do Pydantic
  • Qualidade dos testes e possíveis cenários faltando
  • Sugestões para implementar os próximos pontos do TODO:
    • CRUD completo de itens do cardápio
    • Controle de desconto único por item

Se puderem dar uma olhada no meu repositório e me ajudar com sugestões ou correções, ficarei grato.

4 respostas

Oi, Carloslessa! Como vai?

Sua implementação da Saborexpress API ficou muito bem estruturada! Chamou atenção o cuidado com a validação via Pydantic, o uso de herança e polimorfismo e a cobertura de 94% nos testes, além da preocupação com a PEP 8 e type hints.

Uma dica interessante para o futuro é explorar o uso de response_model no FastAPI para garantir que as respostas das suas rotas sigam um formato bem definido e validado automaticamente. Veja este exemplo:


from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Restaurante(BaseModel):
    nome: str
    ativo: bool

@app.get("/restaurantes", response_model=Restaurante)
def listar_restaurante():
    return {"nome": "Saborexpress", "ativo": True}

Esse código define um modelo de resposta para a rota, garantindo que o FastAPI só retorne dados no formato esperado.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Obrigado, Armano Júnior,

Eu acreditei ter implementado o response_model.

Aqui no schema pydantic:

# schemas/schemas.py

from pydantic import BaseModel


class RestaurantSummary(BaseModel):
    model_config = ConfigDict(
        validate_by_name=True,
        json_schema_extra={
            "example": {
                "nome": "Sabor & Cia",
                "categoria": "Brasileira",
                "media_avaliacoes": 4.5,
                "ativo": True,
            }
        },
    )

E a etapa no main.py

# main.py
from fastapi import FastAPI

from schemas.schemas import  RestaurantSummary


@app.get(
    "/restaurants/summary",
    response_model=List[RestaurantSummary],
    summary="Lista sumarizada de restaurantes",
)
async def summary_restaurants():
    """Retorna resumo (nome, categoria, situaçao e média de avaliações)"""
    return [
        {
            "nome": r._nome,
            "categoria": r._categoria,
            "ativo": r.ativo,
            "media_avaliacoes": r.media_avaliacoes,
        }
        for r in Restaurante.restaurantes
    ]

Alguma correção?

solução!

Boa tarde, Carlos!

Acabei deixando esses pontos passarem quando estava escrevendo a dica, realmente já estava em uso no seu projeto.

No mais, não tenho nenhuma sugestão de correção para ser feita!

Obrigado pelo feedback, Armano Júnior!