🧩 Exercícios: Projeto Corporativo: API de Gestão de Pedidos com Auditoria
Spec Backend Com Python E Fastapi • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 20.1 — Modelagem Completa de Domínio de Pedidos e Itens
Contexto: Modelagem Completa de Domínio de Pedidos e Itens no contexto de Projeto Corporativo: API de Gestão de Pedidos com Auditoria.
Requisitos de Execução:
- Modelar entidades
Pedido,ItemPedidoeStatusPedidoEnumcom relacionamentos e cálculos de subtotal.
Resultado Esperado
Domínio de pedidos modelado com estados: CRIADO, PAGO, FATURADO, CANCELADO.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_20_1_SeuNome - Envie na tarefa:
Atividade Cap 20 - Projeto Corporativo: API de Gestão de Pedidos com Auditoria
🔑 Gabarito de Código & Solução Comentada
# domain_orders.py
from enum import Enum
from pydantic import BaseModel
from typing import List
class StatusPedido(str, Enum):
CRIADO = "CRIADO"
PAGO = "PAGO"
FATURADO = "FATURADO"
CANCELADO = "CANCELADO"
class Item(BaseModel):
sku: str
qtd: int
preco: float
class Pedido(BaseModel):
id: int
cliente_id: int
itens: List[Item]
status: StatusPedido = StatusPedido.CRIADO
@property
def total(self) -> float:
return sum(i.qtd * i.preco for i in self.itens)
ped = Pedido(id=1, cliente_id=42, itens=[Item(sku="SKU1", qtd=2, preco=50.0)])
print(f"Pedido #{ped.id} Total: R$ {ped.total:.2f}")
🔍 Nível 2: Prática
Problema 20.2 — Fluxo Transacional de Faturamento com Bloqueio de Estoque
Contexto: Fluxo Transacional de Faturamento com Bloqueio de Estoque no contexto de Projeto Corporativo: API de Gestão de Pedidos com Auditoria.
Requisitos de Execução:
- Implementar serviço de faturamento que valide estoque, mude o status para FATURADO e gere chave NFe simulada.
Resultado Esperado
Pedido faturado com sucesso -> Chave NFe gerada: '3526...'.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_20_2_SeuNome - Envie na tarefa:
Atividade Cap 20 - Projeto Corporativo: API de Gestão de Pedidos com Auditoria
🔑 Gabarito de Código & Solução Comentada
# billing_service.py
import uuid
def faturar_pedido(pedido_obj):
if pedido_obj.status != StatusPedido.PAGO:
raise ValueError("Apenas pedidos pagos podem ser faturados")
chave_nfe = f"NFE_{uuid.uuid4().hex[:16].upper()}"
pedido_obj.status = StatusPedido.FATURADO
return {"pedido_id": pedido_obj.id, "nfe": chave_nfe, "status": pedido_obj.status}
print("Faturamento mock configurado.")
⚡ Nível 3: Integração
Problema 20.3 — Trilha de Auditoria em JSON Estruturado para Ações Críticas
Contexto: Trilha de Auditoria em JSON Estruturado para Ações Críticas no contexto de Projeto Corporativo: API de Gestão de Pedidos com Auditoria.
Requisitos de Execução:
- Gravar registro de auditoria contendo
usuario_id,acao,ip_origem,payload_diffetimestamp.
Resultado Esperado
Auditoria gravada em JSON estruturado com chave de integridade.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_20_3_SeuNome - Envie na tarefa:
Atividade Cap 20 - Projeto Corporativo: API de Gestão de Pedidos com Auditoria
🔑 Gabarito de Código & Solução Comentada
# audit_trail.py
import json
import time
def registrar_auditoria(usuario_id: int, acao: str, detalhes: dict):
registro = {
"timestamp": int(time.time()),
"usuario_id": usuario_id,
"acao": acao,
"detalhes": detalhes
}
log_json = json.dumps(registro)
print(f"AUDITORIA GRAVADA: {log_json}")
return log_json
registrar_auditoria(42, "FATURAR_PEDIDO", {"pedido_id": 100, "total": 100.0})
🏆 Nível 4: Desafio Corporativo
Problema 20.4 — Suíte de Testes End-to-End do Ciclo de Vida do Pedido
Contexto: Suíte de Testes End-to-End do Ciclo de Vida do Pedido no contexto de Projeto Corporativo: API de Gestão de Pedidos com Auditoria.
Requisitos de Execução:
- Implementar teste E2E completo: Criar Pedido -> Pagar -> Faturar -> Auditar -> Emitir Resposta.
Resultado Esperado
Ciclo completo E2E de Pedidos executado e validado com 100% de sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_20_4_SeuNome - Envie na tarefa:
Atividade Cap 20 - Projeto Corporativo: API de Gestão de Pedidos com Auditoria
🔑 Gabarito de Código & Solução Comentada
# test_e2e_order_lifecycle.py
def test_ciclo_completo_pedido():
# 1. Criação
ped = Pedido(id=500, cliente_id=1, itens=[Item(sku="A", qtd=1, preco=250.0)])
assert ped.status == StatusPedido.CRIADO
# 2. Pagamento
ped.status = StatusPedido.PAGO
# 3. Faturamento
res_fat = faturar_pedido(ped)
assert res_fat["status"] == StatusPedido.FATURADO
# 4. Auditoria
audit = registrar_auditoria(1, "FATURAMENTO_E2E", res_fat)
assert "NFE_" in audit
print("Teste End-to-End de Pedidos PASSOU com 100% de sucesso! 🏆")
test_ciclo_completo_pedido()