Este projeto foi construído utilizando uma arquitetura de microsserviços distribuídos, todos gerenciados por contêineres com Docker Compose. O sistema implementa o padrão SAGA para coordenação de transações distribuídas e utiliza CQRS (Command Query Responsibility Segregation) para separação de responsabilidades de leitura e escrita.
Para executar o projeto, certifique-se de que o Docker e o Docker Compose estejam instalados e devidamente configurados. Em seguida, abra um terminal na raiz do repositório e execute o comando abaixo:
docker-compose up --buildNota: O comando --build garante que as imagens sejam reconstruídas com as últimas alterações do código.
A seguir, a lista dos microsserviços gerenciados e suas respectivas portas:
- API Gateway: exposto na porta 3000; é o serviço principal para interface com o frontend e orquestra as chamadas entre os demais serviços.
- Auth Service: exposto na porta 5000; responsável pela autenticação e autorização de usuários.
- Client Service: exposto na porta 5001; gerencia dados de clientes e saldo de milhas.
- Employee Service: exposto na porta 5002; gerencia dados de funcionários.
- Flight Service: exposto na porta 5003; gerencia informações de voos e aeroportos.
- Booking Command Service: exposto na porta 5004; responsável pelos comandos de reserva (CQRS - Write).
- Orchestrator Service (SAGA): exposto na porta 5005; orquestra transações distribuídas utilizando o padrão SAGA.
- Booking Query Service: exposto na porta 5006; responsável pelas consultas de reserva (CQRS - Read).
O sistema utiliza uma arquitetura de Schema-per-Service para garantir o isolamento de dados entre microsserviços, mantendo a independência e autonomia de cada serviço.
- postgres-db: Porta 5433 - Instância única do PostgreSQL que hospeda múltiplos schemas:
- Schema
client: Dados do serviço de clientes (milhas, transações, informações pessoais) - Schema
bookingcommand: Dados de comandos de reserva (CQRS - Write side) - Schema
bookingquery: Dados de consultas de reserva (CQRS - Read side) - Schema
flight: Dados de voos e aeroportos - Schema
employee: Dados de funcionários
- Schema
- auth-db: Porta 27017 - Banco de dados do serviço de autenticação (credenciais e tokens)
- RabbitMQ: Porta 5672 (AMQP) e 15672 (Management UI)
- Interface de gerenciamento disponível em:
http://localhost:15672 - Credenciais padrão: usuário
guest, senhaguest
- Interface de gerenciamento disponível em:
- API Gateway Pattern: Centraliza o acesso aos microsserviços
- SAGA Pattern: Coordena transações distribuídas
- CQRS: Separa operações de leitura e escrita para reservas
- Event-Driven Architecture: Comunicação assíncrona via RabbitMQ
- Schema-per-Service: Isolamento de dados com schemas dedicados
O sistema utiliza JWT (JSON Web Tokens) para autenticação. Os tokens são gerados pelo Auth Service e validados pelo API Gateway, que também gerencia autorização baseada em roles (CLIENTE/FUNCIONARIO).
Todos os endpoints devem ser acessados através do API Gateway na porta 3000:
POST /login- Autenticação de usuáriosPOST /clientes- Cadastro de clientes (via SAGA)POST /reservas- Criação de reservas (via SAGA)GET /voos- Listagem de voosGET /reservas/{codigo}- Detalhes de uma reservaPOST /logout- Logout de usuários
- O API Gateway implementa blacklist de tokens para logout seguro
- As transações distribuídas são coordenadas pelo Orchestrator Service usando RabbitMQ
- O sistema suporta rollback automático em caso de falhas nas transações SAGA
- Cada microsserviço possui seu próprio schema no PostgreSQL, garantindo isolamento de dados