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)
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
-
Instale as dependências:
npm install
-
Inicie o servidor:
npm run dev
Acesse
http://localhost:3000para ver o Dashboard Visual.
A interface visual (localhost:3000) possui uma aba "Postman Mode" que preenche essas rotas automaticamente.
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 }
]
}Método: POST
URL: /simular-pagamento
Body:
{
"idPedido": "COLE_O_ID_AQUI",
"valor": 379.5
}Método: GET
URL: /pedidos/ID_DO_PEDIDO
-
Abstração (
src/models/Order.ts):- A classe
Pedidomodela o negócio e abstrai a complexidade do cálculo do total e da formatação de dados.
- A classe
-
Encapsulamento (
src/models/Order.ts):- Atributos como
_statussão privados. O estado do objeto só pode ser alterado através de métodos públicos seguros, comomarcarComoPago().
- Atributos como
-
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.
-
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).
- O sistema trata todos os notificadores de forma genérica. Ao chamar o método
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.
- Linguagem: TypeScript (Configurado com ESM)
- Framework Web: Express
- Banco de Dados: LowDB (JSON local)
- Design: Arquitetura Orientada a Eventos