Skip to content

Instantly share code, notes, and snippets.

@AntonStoeckl
Created May 4, 2020 13:58
Show Gist options
  • Save AntonStoeckl/207baad70c7ac510ea95a20fcbccddbe to your computer and use it in GitHub Desktop.
Save AntonStoeckl/207baad70c7ac510ea95a20fcbccddbe to your computer and use it in GitHub Desktop.
Example for my iDDD with Go blog article series at https://medium.com/@TonyBologni
package es
import (
"reflect"
"strings"
"time"
)
const (
metaTimestampFormat = time.RFC3339Nano
)
type EventMeta struct {
eventName string
occurredAt string
streamVersion uint
}
func BuildEventMeta(
event DomainEvent,
streamVersion uint,
) EventMeta {
eventType := reflect.TypeOf(event).String()
eventTypeParts := strings.Split(eventType, ".")
eventName := eventTypeParts[len(eventTypeParts)-1]
meta := EventMeta{
eventName: eventName,
occurredAt: time.Now().Format(metaTimestampFormat),
streamVersion: streamVersion,
}
return meta
}
func RebuildEventMeta(
eventName string,
occurredAt string,
streamVersion uint,
) EventMeta {
return EventMeta{
eventName: eventName,
occurredAt: occurredAt,
streamVersion: streamVersion,
}
}
func (eventMeta EventMeta) EventName() string {
return eventMeta.eventName
}
func (eventMeta EventMeta) OccurredAt() string {
return eventMeta.occurredAt
}
func (eventMeta EventMeta) StreamVersion() uint {
return eventMeta.streamVersion
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment