Spec Backend Com Python E Fastapi • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 13.1 — Disparo de Notificação em Background

Contexto: Disparo de Notificação em Background no contexto de Tarefas em Segundo Plano com BackgroundTasks.

Requisitos de Execução:

  1. Injetar BackgroundTasks em rota POST e agendar execução assíncrona de envio de email após resposta HTTP.

Resultado Esperado

Resposta 202 retornada imediatamente | Tarefa executada em background.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_1_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Tarefas em Segundo Plano com BackgroundTasks
🔑 Gabarito de Código & Solução Comentada
# bg_tasks.py
from fastapi import FastAPI, BackgroundTasks

app = FastAPI()

def enviar_email_confirmacao(email: str, pedido_id: int):
    print(f"[BACKGROUND]: Email de confirmação enviado para {email} (Pedido #{pedido_id})")

@app.post("/pedidos/{pedido_id}/confirmar")
async def confirmar_pedido(pedido_id: int, bg: BackgroundTasks):
    bg.add_task(enviar_email_confirmacao, "cliente@email.com", pedido_id)
    return {"status": "PROCESSANDO", "pedido_id": pedido_id}

🔍 Nível 2: Prática

Problema 13.2 — Agendamento de Múltiplas Tarefas com Parâmetros

Contexto: Agendamento de Múltiplas Tarefas com Parâmetros no contexto de Tarefas em Segundo Plano com BackgroundTasks.

Requisitos de Execução:

  1. Enfileirar duas tarefas independentes em background (gerar PDF de fatura + atualizar métricas).

Resultado Esperado

Duas tarefas em background disparadas em paralelo.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_2_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Tarefas em Segundo Plano com BackgroundTasks
🔑 Gabarito de Código & Solução Comentada
# multiple_bg_tasks.py
from fastapi import FastAPI, BackgroundTasks

app = FastAPI()

def gerar_pdf(doc_id): print(f"Gerando PDF #{doc_id}")
def notificar_slack(msg): print(f"Notificando Slack: {msg}")

@app.post("/documentos/{doc_id}/processar")
async def processar_doc(doc_id: int, bg: BackgroundTasks):
    bg.add_task(gerar_pdf, doc_id)
    bg.add_task(notificar_slack, f"Documento #{doc_id} em processamento")
    return {"mensagem": "Tarefas agendadas"}

⚡ Nível 3: Integração

Problema 13.3 — Tratamento de Erros e Logs em BackgroundTasks

Contexto: Tratamento de Erros e Logs em BackgroundTasks no contexto de Tarefas em Segundo Plano com BackgroundTasks.

Requisitos de Execução:

  1. Envolver a execução da tarefa em bloco try/catch registrando falhas em arquivo de auditoria.

Resultado Esperado

Falha em background tratada e registrada em log sem derrubar o worker.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_3_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Tarefas em Segundo Plano com BackgroundTasks
🔑 Gabarito de Código & Solução Comentada
# safe_bg_task.py
def tarefa_segura_com_log(dados):
    try:
        if not dados: raise ValueError("Dados vazios")
        print(f"Processamento bem sucedido: {dados}")
    except Exception as e:
        print(f"ERRO AUDITADO em Background: {e}")

tarefa_segura_com_log({"id": 10})
tarefa_segura_com_log(None)

🏆 Nível 4: Desafio Corporativo

Problema 13.4 — Limitações de BackgroundTasks vs Workers Dedicados

Contexto: Limitações de BackgroundTasks vs Workers Dedicados no contexto de Tarefas em Segundo Plano com BackgroundTasks.

Requisitos de Execução:

  1. Demonstrar arquitetura comparativa indicando quando migrar de BackgroundTasks nativas para Celery/Redis.

Resultado Esperado

BackgroundTasks adequadas para I/O leve (< 2s) | Celery indicado para processamento pesado e retries.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_4_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Tarefas em Segundo Plano com BackgroundTasks
🔑 Gabarito de Código & Solução Comentada
# task_strategy_advisor.py
def recomendar_estrategia_tarefas(tempo_estimado_segundos, exige_retries):
    if tempo_estimado_segundos > 5 or exige_retries:
        return "RECOMENDADO: Celery / Redis / RabbitMQ (Worker Dedicado)"
    return "RECOMENDADO: BackgroundTasks nativas do FastAPI"

print("Envio de Email Simples:", recomendar_estrategia_tarefas(1, False))
print("Processamento de Vídeo :", recomendar_estrategia_tarefas(60, True))