Versions stable (inachevée mais prête à un déploiement en prod)

This commit is contained in:
DahoudG
2024-12-15 16:35:50 +00:00
parent a276ac2318
commit d2cb9da730
126 changed files with 13559 additions and 631 deletions

View File

@@ -0,0 +1,80 @@
package dev.lions.events;
import dev.lions.exceptions.EventPublicationException;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Event;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Implémentation du publisher d'événements analytiques utilisant le système
* d'événements CDI de Quarkus pour le traitement asynchrone.
*
* @author Lions Dev Team
* @version 1.1
*/
@Slf4j
@ApplicationScoped
public class QuarkusAnalyticsEventPublisher implements AnalyticsEventPublisher {
@Inject
Event<AnalyticsEvent> eventBus;
/**
* Publie un événement analytique de manière asynchrone.
*
* @param event L'événement à publier
* @throws EventPublicationException Si la publication échoue
*/
@Override
public void publish(AnalyticsEvent event) {
log.debug("Publication d'un événement analytique de type: {}", event.getEventType());
try {
eventBus.fireAsync(event)
.handle((success, error) -> {
if (error != null) {
log.error("Erreur lors de la publication de l'événement analytique: {}",
error.getMessage(), error);
throw new EventPublicationException(
"Échec de la publication de l'événement analytique", error);
} else {
log.debug("Événement analytique publié avec succès: {}",
event.getEventType());
}
return null;
});
} catch (Exception e) {
log.error("Erreur inattendue lors de la publication de l'événement", e);
throw new EventPublicationException(
"Échec de la publication de l'événement analytique", e);
}
}
/**
* Publie un lot d'événements analytiques.
*
* @param events Collection d'événements à publier
* @throws EventPublicationException Si la publication d'un des événements échoue
*/
@Override
public void publishBatch(Iterable<AnalyticsEvent> events) {
log.debug("Début de la publication du lot d'événements");
AtomicInteger count = new AtomicInteger(0);
try {
events.forEach(event -> {
publish(event);
count.incrementAndGet();
});
log.info("Lot de {} événements publié avec succès", count.get());
} catch (Exception e) {
log.error("Erreur lors de la publication du lot après {} événements", count.get(), e);
throw new EventPublicationException(
String.format("Échec de la publication du lot après %d événements", count.get()),
e);
}
}
}