Este projeto é um microsserviço de notificações desenvolvido para o Hackathon FIAP, responsável por processar eventos de notificação via Amazon SQS e enviar e-mails usando o SendGrid. O serviço faz parte de uma arquitetura maior que processa uploads de vídeos e notifica os usuários sobre o status do processamento.
- Java 21
- Spring Boot 3.2.3
- Maven 3.9.9
- Amazon SQS - Serviço de filas para processamento de mensagens
- Amazon DynamoDB - Banco de dados NoSQL para armazenamento de dados
- Amazon ECR - Registro de containers para imagens Docker
- SendGrid - Serviço de envio de e-mails
- Docker - Containerização da aplicação
- Kubernetes - Orquestração de containers
- LocalStack - Emulação de serviços AWS localmente
- JaCoCo - Cobertura de testes
- SonarQube - Análise de qualidade de código
- GitHub Actions - CI/CD
src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── fiap/
│ │ └── hackaton/
│ │ ├── core/
│ │ │ ├── domain/
│ │ │ │ ├── entities/ # Domain entities
│ │ │ │ └── exceptions/ # Custom exceptions
│ │ │ └── usecases/ # Application use cases
│ │ ├── infrastructure/
│ │ │ ├── gateways/ # External interface implementations
│ │ │ ├── messaging/ # Message consumers
│ │ │ ├── model/ # DTOs and models
│ │ │ ├── persistence/ # Repositories
│ │ │ └── workers/ # Processing workers
│ │ │ └── dto/ # Data transfer objects
│ │ └── services/ # Application services
│ └── resources/
│ └── application.yml # Application configurations
graph LR
A[Upload Service] -->|Envia Mensagem| B[SQS Queue]
B -->|Consome Mensagem| C[Notification Consumer]
C -->|Busca Dados| D[DynamoDB]
C -->|Envia Email| E[SendGrid]
classDiagram
class NotificationService {
-NotifyUserUseCaseSpec notifyUserUseCase
+processNotification(NotificationEventMessage)
}
class SQSNotificationConsumer {
-NotificationService notificationService
+listen(NotificationEventMessage)
}
class NotifyUserUseCase {
-UploadsRepository uploadRepository
-EmailGatewaySpec emailGateway
+execute(String uploadId)
}
class SendGridEmailGateway {
-SendGrid sendGrid
-String fromEmail
+send(Email email)
}
NotificationService --> NotifyUserUseCase
SQSNotificationConsumer --> NotificationService
NotifyUserUseCase --> SendGridEmailGateway
- Java 21
- Maven 3.9+
- Docker & Docker Compose
- AWS CLI (para testes locais com LocalStack)
- Clone o repositório
git clone https://github.com/seu-usuario/hackathon-fiap-notification-consumer.git
cd hackathon-fiap-notification-consumer
- Configure as variáveis de ambiente
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_REGION=us-east-1
export SENDGRID_API_KEY=your_sendgrid_key
export SENDGRID_FROM_EMAIL=your_email
- Execute com Docker Compose
docker-compose up -d
- Execute a aplicação
./mvnw spring-boot:run
{
"id": "uuid-do-upload",
"status": "PROCESSED",
"message": "Processamento concluído"
}
- Assunto: "Processamento de video concluido"
- Corpo: Inclui status do processamento e link para download (se disponível)
# Executar todos os testes
mvn test
# Executar testes com cobertura
mvn verify
O deploy é realizado automaticamente via GitHub Actions quando há push na branch main:
- Build e testes
- Análise de código com SonarQube
- Build da imagem Docker
- Push para Amazon ECR
- Deploy no EKS
spring:
application:
name: notification-consumer
cloud:
aws:
credentials:
access-key: ${AWS_ACCESS_KEY_ID}
secret-key: ${AWS_SECRET_ACCESS_KEY}
region:
static: ${AWS_REGION}
sqs:
endpoint: ${SQS_ENDPOINT}
dynamodb:
endpoint: ${DYNAMO_DB_ENDPOINT}
table-prefix: fiap-hackaton-
app:
message-broker:
event:
notification:
queue-name: notification-event-queue
sendgrid:
api-key: ${SENDGRID_API_KEY}
email:
from: ${SENDGRID_FROM_EMAIL}
- Fork o projeto
- Crie uma branch (
git checkout -b feature/amazing-feature
) - Commit suas mudanças (
git commit -m 'Add amazing feature'
) - Push para a branch (
git push origin feature/amazing-feature
) - Abra um Pull Request
Este projeto está sob a licença GNU General Public License v3.0.
Para dúvidas ou sugestões, entre em contato com o time técnico do FIAP 8SOAT TEAM 32.