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:

  1. Modelar entidades Pedido, ItemPedido e StatusPedidoEnum com 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)

  1. Salve o arquivo como: Atividade_20_1_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_20_2_SeuNome
  2. 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:

  1. Gravar registro de auditoria contendo usuario_id, acao, ip_origem, payload_diff e timestamp.

Resultado Esperado

Auditoria gravada em JSON estruturado com chave de integridade.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_20_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_20_4_SeuNome
  2. 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()