
driven-adapter.async-event-bus.reactive-events-gateway.mustache Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scaffold-clean-architecture Show documentation
Show all versions of scaffold-clean-architecture Show documentation
Gradle plugin to create a clean application in Java that already works, It follows our best practices!
package {{package}}.events;
import {{package}}.model.events.gateways.EventsGateway;
{{#lombok}}
import lombok.RequiredArgsConstructor;
import lombok.extern.java.Log;
{{/lombok}}
{{#eda}}
import org.reactivecommons.api.domain.DomainEvent;
import org.reactivecommons.api.domain.DomainEventBus;
import org.reactivecommons.async.impl.config.annotations.EnableDomainEventBus;
import reactor.core.publisher.Mono;
import io.cloudevents.CloudEvent;
import io.cloudevents.core.builder.CloudEventBuilder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.util.UUID;
import java.net.URI;
import java.time.OffsetDateTime;
{{/eda}}
{{^eda}}
import org.reactivecommons.api.domain.DomainEvent;
import org.reactivecommons.api.domain.DomainEventBus;
import org.reactivecommons.async.impl.config.annotations.EnableDomainEventBus;
import reactor.core.publisher.Mono;
import java.util.UUID;
{{/eda}}
{{#lombok}}
import java.util.logging.Level;
{{/lombok}}
import static reactor.core.publisher.Mono.from;
{{#lombok}}
@Log
@RequiredArgsConstructor
{{/lombok}}
@EnableDomainEventBus
public class ReactiveEventsGateway implements EventsGateway {
public static final String SOME_EVENT_NAME = "some.event.name";
private final DomainEventBus domainEventBus;
{{#eda}}
private ObjectMapper om = new ObjectMapper();
{{/eda}}
{{^lombok}}
public ReactiveEventsGateway(DomainEventBus domainEventBus) {
this.domainEventBus = domainEventBus;
}
{{/lombok}}
@Override
public Mono emit(Object event) {
{{#lombok}}
log.log(Level.INFO, "Sending domain event: {0}: {1}", new String[]{SOME_EVENT_NAME, event.toString()});
{{/lombok}}
{{#eda}}
CloudEvent eventCloudEvent = null;
try {
eventCloudEvent = CloudEventBuilder.v1() //
.withId(UUID.randomUUID().toString()) //
.withSource(URI.create("https://spring.io/foos"))//
.withType(SOME_EVENT_NAME) //
.withDataContentType("application/json")
.withTime(OffsetDateTime.now())
.withData("application/json", om.writeValueAsBytes(event))
.build();
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
return from(domainEventBus.emit(new DomainEvent(SOME_EVENT_NAME, UUID.randomUUID().toString(), eventCloudEvent)));
{{/eda}}
{{^eda}}
return from(domainEventBus.emit(new DomainEvent<>(SOME_EVENT_NAME, UUID.randomUUID().toString(), event)));
{{/eda}}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy