Este projeto é uma aplicação Full Stack para um E-commerce de PetShop, desenvolvida com Java, Spring Boot 3+ no backend e Angular no frontend. O objetivo é simular uma plataforma completa onde os usuários podem navegar e realizar compras de produtos para pets de maneira intuitiva e segura.

Esta aplicação utiliza uma arquitetura baseada em microsserviços para gerenciar diferentes funcionalidades de forma isolada, garantindo escalabilidade, modularidade e facilidade de manutenção. Abaixo estão os principais microsserviços que compõem o sistema.
Microsservice PetHouse 🏠
Descrição:
Este é o serviço principal da aplicação, responsável por gerenciar grande parte das funcionalidades, incluindo o cadastro de usuários, gerenciamento de produtos, controle do carrinho de compras e envio de mensagens para os tópicos no Kafka.
Microsservice Auth 🔐
Descrição:
Este microsserviço é responsável pela autenticação e autorização dos usuários. Ele gerencia a criação de tokens JWT para controle de sessão e também a renovação de tokens.
Microsservice Payment 💸
Descrição:
Este serviço é responsável por processar os pagamentos dos pedidos feitos pelos usuários. Ele ouve o tópico Kafka Itens para receber detalhes do pedido e então integra com o sistema de pagamentos Assas para completar a transação.
Microsservice Email 📧
Descrição:
Este microsserviço é responsável pelo envio de e-mails personalizados aos usuários, utilizando templates específicos para diferentes eventos. Ele ouve vários tópicos Kafka, como bemVindo, carrinho e vendas, e aciona o envio de e-mails adequados.
O fluxo de dados entre os microsserviços foi projetado para garantir uma interação eficiente entre as funcionalidades da aplicação, utilizando tópicos no Kafka para comunicação assíncrona entre os serviços. Esse fluxo garante que os microsserviços possam operar de forma desacoplada, mas ainda assim colaborativa.
-
- Cadastro de Usuários
Quando um novo usuário se cadastra na aplicação através do PetHouse Service, os dados do usuário são enviados ao tópico Kafka bemVindo. O Email Service escuta este tópico e envia automaticamente um e-mail de boas-vindas ao usuário.
-
- Adição de Produtos ao Carrinho
Quando o usuário adiciona um produto ao carrinho, o PetHouse Service envia os detalhes do carrinho para o tópico Kafka carrinho. O Email Service escuta este tópico e pode enviar um e-mail de notificação ao usuário com um resumo do carrinho ou lembretes sobre os itens.
-
- Seleção de Método de Pagamento
Após o usuário escolher um método de pagamento, o PetHouse Service envia os dados do pedido para o tópico Kafka Itens. O Payment Service escuta este tópico para processar o pagamento utilizando a integração com o sistema Assas.
-
- Processamento do Pagamento
O Payment Service processa o pagamento e, uma vez que o pedido é confirmado e o pagamento é aprovado, ele envia uma mensagem para o tópico Kafka vendas. Isso aciona tanto o PetHouse Service para atualizar o status do pedido quanto o Email Service para enviar um e-mail de confirmação de compra ao usuário.
Resumo do Fluxo:
Cadastro de Usuário:
Ação: O usuário se cadastra no PetShop.
Resultado: O PetHouse Service envia os dados ao tópico bemVindo, acionando o envio de um e-mail de boas-vindas pelo Email Service.
Ação no Carrinho:
Ação: O usuário adiciona produtos ao carrinho.
Resultado: O PetHouse Service envia os dados ao tópico carrinho, acionando o Email Service para enviar e-mails de lembrete.
Escolha do Pagamento:
Ação: O usuário seleciona o método de pagamento.
Resultado: O PetHouse Service envia os dados para o tópico Itens, que é escutado pelo Payment Service para processar o pagamento.
Confirmação de Pagamento:
Ação: O pagamento é processado com sucesso.
Resultado: O Payment Service envia os dados para o tópico vendas, notificando o Email Service para enviar a confirmação de compra e o PetHouse Service para atualizar o status do pedido.

Centralizamos a documentação do nosso sistema usando Swagger, proporcionando uma visão unificada e acessível de todos os nossos serviços

https://github.com/user-attachments/assets/d8ec03dc-51a0-4141-ab9b-61a685b13c88
Acesse a documentação do projeto:
Quando subir a aplicação acesse usando esse link
Implementação Distributed Tracing no sistema utilizando o Zipkin, uma ferramenta poderosa para monitorar e analisar o fluxo de solicitações em ambientes distribuídos.

https://github.com/user-attachments/assets/0908a0be-559b-4b2c-bf47-3e1e7639d1ec
Acesse a documentação do projeto:
Quando subir a aplicação acesse usando esse link
Utilizei o Flyway para gerenciar e versionar as migrações do banco de dados de forma automática e eficiente. Isso garante que o esquema do banco esteja sempre atualizado, permitindo controle de versão e facilidade na aplicação de novas alterações.

As imagens dos produtos são armazenadas no AWS S3, garantindo um armazenamento seguro, escalável e altamente disponível. O S3 permite que os arquivos de imagens sejam facilmente acessados pela aplicação, proporcionando performance e integridade dos dados.

A aplicação está integrada ao Assas, um sistema de gestão de pagamentos que permite processar transações de forma segura e eficiente. Com essa integração, é possível oferecer várias opções de pagamento, como PIX, boleto bancário, e cartão de crédito.

A integração contínua e o deploy contínuo (CI/CD) do projeto são gerenciados pelo Jenkins. Esse pipeline é responsável por automatizar o processo de construção da aplicação, empacotamento da imagem Docker, e envio para o DockerHub.

Execute o projeto 👁🗨
Pré-requisitos: Java 17 e Docker
Clone o repositório do projeto
git clone https://github.com/AugustoMello09/PetHouse.git
Configurando o projeto local 🏠
Configurando o ambiente:
- Navegue até o diretório do projeto
cd PetHouse/PetHouseBackend
- Acesse todos os diretórios do projeto, utilize o comando
cd e o nome do diretório para instalar todas as dependências necessárias:
# exemplo
cd PetHouseBackend/auth
mvn clean package -DskipTest=true
-
Acesse o diretório de cada microsserviço (por exemplo, PetHouse, payment).
Abra o arquivo de configuração application.yml.
-
Modifique as configurações necessárias, como URLs dos serviços dependentes.
Troque para localhost
management:
tracing:
sampling:
probability: 1.0
zipkin:
tracing:
endpoint: http://localhost:9411/api/v2/spans
kafka:
consumer:
bootstrap-servers: localhost:29092
producer:
bootstrap-servers: localhost:29092
Modificando as variáveis de ambiente
AWS S3
- Criação de uma conta da AWS
https://aws.amazon.com/pt/
1 - No console AWS, acessar S3
2 - Create Bucket -> dê um nome e desmarque a opção de Block all public access
- Setup do IAM - Identity Access Management
Acessar o dashboard -> Security, Identity & Compliance -> IAM
- Setup do MFA - Multi-factor authentication (OPCIONAL)
1 - Instalar o Google Authenticator App no seu smartphone
2 - Clicar no botão "Manage MFA" e selecione "A virtual MFA device"
3 - Ler o QR Code a partir do app Google Authenticator
4 - Entrar com dois códigos gerados pelo app e clique em "Activate Virtual MFA"
- Create individual IAM users
1 - Manage users -> Create new users
2 - Crie um usuário para seu sistema acessar o S3 (exemplo: "spring_user")
3 - Baixe o arquivo com as credenciais do usuário (user name, access key id, secret access key)
- Use groups to assign permissions
1 - Manage groups -> Create new group
2 - Criar um grupo (exemplo: "developers")
3 - Busque por "S3" e selecione "AmazonS3FullAccess" e confirme
4 - Selecione o grupo e clique: Group Actions -> Add Users do Group
5 - Selecione o usuário e confirme
-
Apply an IAM password policy (OPCIONAL)
1 - Manage Password Policy
2 - Selecione as políticas desejadas
-
Alterações na políticas de Block do bucket
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::curso-spring-ionic/*"
]
}
]
}
Alterando os dados do application.yml do PetHouse
agora com os dados necessários crie as variáveis de ambiente para conseguir usar os serviço da AWS S3
- Depois de ter salvo as variáveis de ambiente entra na PetHouse e coloque os valores das chaves
aws:
s3:
access-key: ${AWS_ACCESS_KEY}
secret-key: ${AWS_SECRET_ACCESS_KEY}
region: ${AWS_REGION}
bucket-name: ${AWS_BUCKET_NAME}
Assas
Agora Crie uma conta no ambiente de SendBox do Assas e gere o token de acesso.
https://docs.asaas.com/docs/visao-geral
um vídeo explicativo no canal do Assas https://youtu.be/3TEclkugpkE
- Com o token criado faça a mesma coisa e crie uma nova variavel de ambiente e coloque o valor no yml da PetHouse e também do Payment
access:
token: ${access_token}
Rodando a aplicação
Antes de rodar prepare o docker-compose
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
networks:
- broker-kafka
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka:
image: confluentinc/cp-kafka:latest
networks:
- broker-kafka
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092