📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 08: Bancos de Dados SQL e NoSQL. Recomendado revisar antes de começar.

🌐 Persistência Poliglota Integrada & Gestão Logística Enterprise

v1.0 — Arquitetura Multimodelo: PostgreSQL (ACID) + MongoDB (Eventos) + Redis (Cache)

Trilha de Engenharia de Dados & Bancos de Dados — Projeto 10 de 10

🎓 Nível Profissional Simulado: Principal Data Architect / Staff Engineer. Em grandes plataformas de e-commerce e logística (Mercado Livre, Amazon), tentar forçar todos os tipos de dados em um único banco relacional resulta em falha de escala. A Persistência Poliglota direciona cada requisito para o motor com máxima afinidade natural.


🎯 Objetivo

Arquitetar e implementar uma plataforma corporativa de Persistência Poliglota unindo PostgreSQL 16 (integridade financeira e faturas ACID), MongoDB 7.0 (histórico flexível de checkpoints com coordenadas GPS) e Redis 7.2 (cache volátil de localização e status em tempo real para dispositivos móveis).


🏗️ Diagrama de Arquitetura Poliglota

flowchart LR
    classDef client fill:#1E293B,stroke:#0EA5E9,stroke-width:2px,color:#fff;
    classDef api fill:#0F172A,stroke:#38BDF8,stroke-width:2px,color:#fff;
    classDef sql fill:#1E3A8A,stroke:#3B82F6,stroke-width:2px,color:#fff;
    classDef doc fill:#064E3B,stroke:#10B981,stroke-width:2px,color:#fff;
    classDef mem fill:#7F1D1D,stroke:#EF4444,stroke-width:2px,color:#fff;

    App["📱 App do Entregador & Painel Web"]:::client
    API["⚙️ Orquestrador de Logística"]:::api

    App <--> API

    API -->|1. Faturas & Fretes| SQL["🐘 PostgreSQL 16<br/>(Transações ACID)"]:::sql
    API -->|2. Checkpoints & GPS| MONGO["🍃 MongoDB 7.0<br/>(JSON Dinâmico)"]:::doc
    API -->|3. Status em Tempo Real| REDIS["⚡ Redis 7.2<br/>(Cache em Memória)"]:::mem

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Diretoria de Tecnologia & Logística)

“Nossa transportadora entrega 100.000 encomendas por dia. O sistema antigo tentava gravar os pings de GPS dos motoristas no PostgreSQL, travando o faturamento e a emissão de notas fiscais. Queremos separar as coisas: notas e valores financeiros no PostgreSQL; o histórico de paradas com latitude/longitude no MongoDB; e o status da entrega para o cliente consultar no aplicativo direto no Redis em sub-milissegundo.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Persistir pedidos e faturas financeiras no PostgreSQL com garantia ACID. “notas e valores no PostgreSQL”
RF02 Funcional Gravar eventos de checkpoints com cidades e coordenadas no MongoDB. “histórico de paradas com latitude/longitude”
RF03 Funcional Disponibilizar status instantâneo via Redis para o aplicativo mobile. “consultar no app em sub-milissegundo”
RNF01 Não-Funcional Desacoplamento de falha: lentidão na gravação de GPS não deve impactar o faturamento. Resiliência de Arquitetura
RNF02 Não-Funcional Consistência eventual coordenada entre as camadas de dados. Integridade Distribuída

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como cliente, quero rastrear minha encomenda no aplicativo sem lentidão via cache Redis. Alta
US02 Como motorista, quero registrar checkpoints de entrega salvando rotas dinâmicas no MongoDB. Alta
US03 Como diretor financeiro, quero garantir que nenhuma fatura seja corrompida no PostgreSQL. Alta

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-polyglot-persistence

# Subir todo o ecossistema integrado (Postgres + Mongo + Redis)
docker-compose up -d

# Validar se os 3 containers estão saudáveis
docker ps

🛠️ Fase 4 — Implementação Passo a Passo (app/logistica_orchestrator.py)

class LogisticaPoliglotaOrchestrator:
    def __init__(self):
        self.postgres_faturas = {}
        self.mongo_checkpoints = {}
        self.redis_cache = {}

    def criar_pedido_entrega(self, codigo_rastreio, remetente_id, destinatario, frete):
        # 1. PostgreSQL (ACID)
        self.postgres_faturas[codigo_rastreio] = {"frete": frete, "status": "PAGO"}
        # 2. Redis (Cache)
        self.redis_cache[codigo_rastreio] = {"status": "CRIADO"}

    def registrar_checkpoint(self, codigo_rastreio, evento, cidade, uf):
        # 3. MongoDB (Documento livre)
        self.mongo_checkpoints[codigo_rastreio].append({"evento": evento, "cidade": cidade})
        self.redis_cache[codigo_rastreio]["status"] = evento

🧭 Decisões Técnicas (ADRs)


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd db_poliglota_10_logistica_integrada

2. Execute a aplicação ou testes

docker-compose up -d
# Executar a suíte de testes automatizados de integração:
python -m unittest tests/test_poliglota_integrada.py

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/db_poliglota_10_logistica_integrada


🧪 Testes de Validação & Asserções

# Executar suíte de integração poliglota
python -m unittest tests/test_poliglota_integrada.py

✅ Checkpoint Final

  1. Persistência Poliglota desacopla dados financeiros, eventos dinâmicos e cache.
  2. PostgreSQL garante faturas ACID sem risco de corrupção.
  3. MongoDB absorve checkpoints de GPS sem esquema rígido.
  4. Redis entrega tempo de resposta de 1ms para consultas de tracking mobile.
  5. Suíte de testes automatizados com 100% de aprovação.
  6. Docker Compose unificado e pronto para execução.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal