-
-
Notifications
You must be signed in to change notification settings - Fork 39
/
EventEnvelope.java
43 lines (35 loc) · 1.21 KB
/
EventEnvelope.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package io.eventdriven.ecommerce.core.events;
import com.eventstore.dbclient.ResolvedEvent;
import io.eventdriven.ecommerce.core.serialization.EventSerializer;
import org.springframework.core.ResolvableType;
import org.springframework.core.ResolvableTypeProvider;
import java.util.Optional;
public record EventEnvelope<Event>(
Event data,
EventMetadata metadata
) implements ResolvableTypeProvider {
public static <Event> Optional<EventEnvelope<Event>> of(final Class<Event> type, ResolvedEvent resolvedEvent) {
if (type == null)
return Optional.empty();
var eventData = EventSerializer.deserialize(type, resolvedEvent);
if (eventData.isEmpty())
return Optional.empty();
return Optional.of(
new EventEnvelope<>(
eventData.get(),
new EventMetadata(
resolvedEvent.getEvent().getEventId().toString(),
resolvedEvent.getEvent().getRevision(),
resolvedEvent.getEvent().getPosition().getCommitUnsigned(),
resolvedEvent.getEvent().getEventType()
)
)
);
}
@Override
public ResolvableType getResolvableType() {
return ResolvableType.forClassWithGenerics(
getClass(), ResolvableType.forInstance(data)
);
}
}