Skip to content

GuickerZ/sistema-poo-eda

Repository files navigation

Projeto Final - Unidade 4: Arquitetura de Software

INTEGRANTES DO GRUPO:

  • Guilherme Matias de Melo Soares
  • Maria Eduarda Almeida de Noronha
  • Maria Eduarda Xavier
  • Mylena dos Santos

Disciplina: Arquitetura de Software Professora: Arianne Sarmento Torcate Instituição: IFPE (Instituto Federal de Pernambuco)


📌 Sobre o Projeto

Este projeto implementa um backend para gestão de pedidos utilizando Arquitetura Orientada a Eventos (EDA). O objetivo é demonstrar na prática os 4 Pilares da POO e o Padrão de Projeto Observer.

Collection do Postman: Acessar Rotas no Postman


🚀 Como Rodar

Localmente

  1. Instale as dependências:

    npm install
  2. Inicie o servidor:

    npm run dev

    Acesse http://localhost:3000 para ver o Dashboard Visual.


📡 API Endpoints

A interface visual (localhost:3000) possui uma aba "Postman Mode" que preenche essas rotas automaticamente.

1. Criar um Pedido

Método: POST URL: /pedidos Body:

{
  "nomeCliente": "Guilherme Matias",
  "itens": [
    { "nome": "Livro - Tudo ficará bem por Maria Ed. Almeida", "preco": 32.5, "quantidade": 1 }
    { "nome": "Teclado Aula f75", "preco": 357, "quantidade": 1 }
  ]
}

2. Simular Pagamento

Método: POST URL: /simular-pagamento Body:

{
  "idPedido": "COLE_O_ID_AQUI",
  "valor": 379.5
}

3. Consultar Pedido

Método: GET URL: /pedidos/ID_DO_PEDIDO


🏗️ Pilares da POO (Explicação Técnica)

  1. Abstração (src/models/Order.ts):

    • A classe Pedido modela o negócio e abstrai a complexidade do cálculo do total e da formatação de dados.
  2. Encapsulamento (src/models/Order.ts):

    • Atributos como _status são privados. O estado do objeto só pode ser alterado através de métodos públicos seguros, como marcarComoPago().
  3. Herança (src/notifications/NotificationBase.ts):

    • As classes de notificação (Email e Webhook) herdam propriedades comuns da classe base, evitando repetição de código.
  4. Polimorfismo (src/index.ts):

    • O sistema trata todos os notificadores de forma genérica. Ao chamar o método .enviar(), cada objeto executa sua implementação específica (enviar log de email ou fazer requisição HTTP).

👁️ Padrão Observer

O padrão Observer foi implementado na classe BarramentoEventos (src/event-bus.ts).

  • Problema: Evitar que o Controller de Pagamento precise conhecer detalhes sobre envio de E-mail ou Webhooks.
  • Solução: O Controller apenas emite o evento PAGAMENTO_RECEBIDO. O Barramento avisa os "Listeners" registrados, que executam as ações em segundo plano. Isso garante o desacoplamento do sistema.

🛠️ Tecnologias Utilizadas

  • Linguagem: TypeScript (Configurado com ESM)
  • Framework Web: Express
  • Banco de Dados: LowDB (JSON local)
  • Design: Arquitetura Orientada a Eventos

About

🛒 Sistema de pedidos em TypeScript usando POO e arquitetura orientada a eventos (projeto da Unidade 4).

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published