Este é um projeto desenvolvido como parte da pós-graduação POSTECH na FIAP. O objetivo deste projeto é construir uma API para gerenciar uma lanchonete, com operações de CRUD de produtos, adição ao carrinho de compras, checkout utilizando Mercado Pago para gerar QR Codes e lidar com pedidos via RabbitMQ.
Repositório é acessível através do seguinte link.
Como parte da documentação do projeto, o Event Storming pode ser encontrado clicando aqui.
O projeto implementa diversas funcionalidades, como:
- CRUD de Produtos: Cadastro, edição, listagem e exclusão de produtos.
- Carrinho de Compras: Adição de produtos ao carrinho e gerenciamento do mesmo.
- Checkout: Integração com o Mercado Pago para geração de QR Codes.
- Confirmação de Pagamento: Confirmação do pagamento via Mercado Pago e atualização do status do pedido para pronto.
- Mudança de Estado do Pedido: Transição de status como "pronto", "finalizado", etc.
- Eventos com RabbitMQ: Integração com RabbitMQ para comunicação de eventos de pagamento e pedidos.
O projeto utiliza uma combinação de Arquitetura Limpa e Arquitetura Hexagonal, buscando separar as responsabilidades em diferentes camadas, facilitando a manutenção e escalabilidade. As principais camadas incluem:
- Domínio: Onde se encontram as regras de negócio.
- Aplicação: Contém os casos de uso e interações entre as camadas.
- Infraestrutura: Implementação de acesso a banco de dados (MongoDB) e comunicação com RabbitMQ.
- Node.js 20: Plataforma para executar o JavaScript no servidor.
- TypeScript: Linguagem que adiciona tipos ao JavaScript.
- MongoDB: Banco de dados NoSQL utilizado para armazenar os produtos e pedidos.
- RabbitMQ: Sistema de mensageria para lidar com eventos de pagamento e pedidos.
- Mercado Pago: Utilizado como gateway de pagamento para geração de QR Codes.
Antes de começar, certifique-se de ter os seguintes itens instalados:
- Node.js 20
- Docker
- Mercado Pago para geração de QR Codes
O projeto requer a definição da variável de ambiente para o token do Mercado Pago:
MERCADO_PAGO_TOKEN=seu_token_aqui
Para rodar o projeto em modo de desenvolvimento:
- Instale as dependências:
npm install
- Suba os containers do MongoDB e RabbitMQ:
docker-compose up -d
- Execute o projeto em modo de desenvolvimento:
npm run start:dev
- Para gerar a build de produção e rodar o projeto:
npm run build
npm start
A aplicação será acessível através da porta 3000.
A documentação completa da API está disponível no formato OpenAPI.
- A especificação OpenAPI encontra-se no arquivo
docs/openapi.json
. Com a aplicação rodando, acesse http://localhost:3000/swagger. - Além disso, na pasta
docs/collection
, existem arquivos para o projeto Bruno, uma alternativa ao Postman, onde você pode importar e testar as rotas da aplicação.
Antes de realizar o checkout de um pedido, é necessário gerar um token de autenticação do Mercado Pago. Isso pode ser feito seguindo este guia. O token deve ser configurado na variável de ambiente MERCADO_PAGO_TOKEN
conforme mostrado anteriormente.
.
├── docs
│ ├── openapi.json # Especificação OpenAPI para a aplicação
│ └── collection # Arquivos do projeto Bruno para consulta da API
├── src
│ ├── server.ts # Arquivo principal, ponto de entrada da aplicação
│ └── ... # Demais arquivos do projeto
├── Dockerfile # Arquivo de configuração do Docker
├── docker-compose.yml # Arquivo de configuração do Docker Compose
├── package.json # Dependências e scripts do projeto
└── README.md # Este arquivo
npm run start
: Inicia o projeto em modo de desenvolvimento.npm run build
: Gera a build de produção.npm start
: Executa o projeto em produção após a build.docker build .
: Constrói a imagem Docker do projeto.docker-compose up
: Sobe o MongoDB, RabbitMQ e a aplicação via Docker Compose.
Este projeto foi desenvolvido como parte do curso de pós-graduação da FIAP na disciplina de Arquitetura de Software. Ele foi projetado para uma aplicação de uma lanchonete, mas a estrutura é facilmente adaptável para outros domínios que envolvem sistemas de pedidos, pagamentos e comunicação com sistemas externos.
Eder Ferreira de Matos ederfmatos@gmail.com
Matheus Henrique da Silva Mendes matheushenriquesad@gmail.com
ANDERSON MARTINIANO DA SILVA and.martiniano@gmail.com
Matheus Trindade dos Santos maatheus.trindade.santos@gmail.com