Documentation
¶
Index ¶
- Variables
- func GetType(e Event) reflect.Type
- func GetTypeName(e Event) string
- func NewULID() string
- type Aggregate
- type AggregatorMock
- type BaseEvent
- type Event
- type NotificationService
- type NotificationServiceMock
- type QueryOption
- type Record
- type Repository
- type RepositoryMock
- func (r RepositoryMock) AddNotificationService(service NotificationService)
- func (r RepositoryMock) GetEventsBySequenceID(ctx context.Context, sequenceID string, opts ...QueryOption) ([]Event, error)
- func (r RepositoryMock) GetEventsBySequenceIDAndType(ctx context.Context, sequenceID string, eventType Event, opts ...QueryOption) ([]Event, error)
- func (r RepositoryMock) GetEventsByTimestamp(ctx context.Context, timestamp int64, opts ...QueryOption) ([]Event, error)
- func (r RepositoryMock) Load(ctx context.Context, id string, aggr Aggregate) (deleted bool, err error)
- func (r RepositoryMock) LoadEvents(ctx context.Context, opts ...QueryOption) ([]Event, error)
- func (r RepositoryMock) Save(ctx context.Context, events ...Event) error
- func (r RepositoryMock) SaveTransaction(ctx context.Context, events ...Event) (StoreTransaction, error)
- func (r RepositoryMock) Store() Store
- func (r RepositoryMock) UnmarshalRecords(records []Record) ([]Event, error)
- type Serializer
- type SerializerMock
- type Store
- type StoreMock
- func (o StoreMock) Load(ctx context.Context, opts ...QueryOption) (record []Record, err error)
- func (o StoreMock) LoadByAggregate(ctx context.Context, aggregateID string, opts ...QueryOption) (record []Record, err error)
- func (o StoreMock) LoadBySequenceID(ctx context.Context, sequenceID string, opts ...QueryOption) (record []Record, err error)
- func (o StoreMock) LoadBySequenceIDAndType(ctx context.Context, sequenceID string, eventType string, opts ...QueryOption) (record []Record, err error)
- func (o StoreMock) LoadByTimestamp(ctx context.Context, timestamp int64, opts ...QueryOption) (record []Record, err error)
- func (o StoreMock) NewTransaction(ctx context.Context, records ...Record) (StoreTransaction, error)
- type StoreTransaction
- type StoreTransactionMock
Constants ¶
This section is empty.
Variables ¶
var ( // ErrDeleted is returned by Aggregate.On() method to signal that the object has been deleted ErrDeleted = errors.New("not found (was deleted)") // ErrNoHistory is returned by Repository.Load() when no history exist for the given aggregate ID ErrNoHistory = errors.New("no history found") // ErrNotificationFailed is returned by Commit() if notification service fails ErrNotificationFailed = errors.New("Failed to send notification") )
Functions ¶
func GetType ¶
GetType the type of the given input value, or if input is a pointer, return the type of the pointed to object
func GetTypeName ¶
GetTypeName the type of the given input value, or if input is a pointer, return the type of the pointed to object
Types ¶
type Aggregate ¶
Aggregate is an interface representing an object whose state changes can be recorded to and replayed from an event source.
type AggregatorMock ¶
AggregatorMock is a mock
func CreateAggregatorMock ¶
func CreateAggregatorMock() *AggregatorMock
CreateAggregatorMock returns an aggregatorMock
func (AggregatorMock) On ¶
func (o AggregatorMock) On(ctx context.Context, event Event) error
On is a mock
func (AggregatorMock) SetAggregateID ¶
func (o AggregatorMock) SetAggregateID(id string)
SetAggregateID is not implemented
type BaseEvent ¶
type BaseEvent struct {
AggregateID string `json:"aggregateId"`
UserID string `json:"userId"`
SequenceID string `json:"sequenceId"`
Timestamp int64 `json:"timestamp"`
}
BaseEvent ...
func (*BaseEvent) SetSequenceID ¶
SetSequenceID ...
type Event ¶
type Event interface {
GetAggregateID() string
GetUserID() string
GetSequenceID() string
GetTimestamp() int64
SetSequenceID(string)
SetTimestamp(int64)
}
Event ...
type NotificationService ¶
type NotificationService interface {
Send(record Record) error // deprecated use SendWithContext instead
SendWithContext(ctx context.Context, record Record) error
}
NotificationService represents a service which can emit notifications when records are saved to the event source
type NotificationServiceMock ¶
func CreateNotificationServiceMock ¶
func CreateNotificationServiceMock() *NotificationServiceMock
CreateNotificationServiceMock creates a notification service mock
func (NotificationServiceMock) Send ¶ added in v2.1.0
func (ns NotificationServiceMock) Send(record Record) error
func (NotificationServiceMock) SendWithContext ¶ added in v2.5.0
func (ns NotificationServiceMock) SendWithContext(ctx context.Context, record Record) error
type QueryOption ¶
type QueryOption func(opt interface{})
QueryOption is used for setting store specific options like limit or sorting Can be found in any of the stores
type Record ¶
type Record struct {
AggregateID string `json:"aggregateId" dynamodbav:"aggregateId"`
SequenceID string `json:"sequenceId" dynamodbav:"sequenceId"`
Type string `json:"type" dynamodbav:"type"`
UserID string `json:"userId" dynamodbav:"userId"`
Data []byte `json:"data" dynamodbav:"data"`
Timestamp int64 `json:"timestamp" dynamodbav:"timestamp"`
}
Record is a store row. The Data field contains the marshalled Event, and Type is the type of event retrieved by reflect.TypeOf(event).
type Repository ¶
type Repository interface {
// Return store
Store() Store
// Save one or more events to the repository
Save(ctx context.Context, events ...Event) error
// Save one or more events to the repository, within a transaction
SaveTransaction(ctx context.Context, events ...Event) (StoreTransaction, error)
// Load events from repository for the given aggregate ID. For each event e,
// call aggr.On(e) to update the state of aggr. When done, aggr has been
// "fast forwarded" to the current state.
Load(ctx context.Context, id string, aggr Aggregate) (deleted bool, err error)
// Get all events with query options (definied in the store)
// Query options can be used for filter by sequence ID (see https://github.com/oklog/ulid)
// or options like limit, offset
LoadEvents(ctx context.Context, opts ...QueryOption) (events []Event, err error)
// Deprecated: Use LoadEvents(ctx, store.BySequenceId(...))
// Get all events with sequence ID newer than the given ID (see https://github.com/oklog/ulid)
// Return at most limit records. If limit is 0, don't limit the number of records returned.
GetEventsBySequenceID(ctx context.Context, sequenceID string, opts ...QueryOption) (events []Event, err error)
// Deprecated: Use LoadEvents(ctx, store.BySequenceId(...), store.ByType(...))
// Same as GetEventsBySequenceID, but only returns events of the same type
// as the one provided in the eventType parameter.
GetEventsBySequenceIDAndType(ctx context.Context, sequenceID string, eventType Event, opts ...QueryOption) (events []Event, err error)
// Deprecated: Use LoadEvents(ctx, store.ByTimestamp(...))
// Get all events newer than the given timestamp
// Return at most limit records. If limit is 0, don't limit the number of records returned.
GetEventsByTimestamp(ctx context.Context, timestamp int64, opts ...QueryOption) (events []Event, err error)
// Add notification service
AddNotificationService(service NotificationService)
// Unmarshal records to events using repository
UnmarshalRecords(records []Record) (events []Event, err error)
}
Repository is an interface representing the actual event source.
func NewRepository ¶
func NewRepository(store Store, serializer Serializer) Repository
NewRepository returns a new repository
type RepositoryMock ¶
RepositoryMock is a mock
func CreateRepositoryMock ¶
func CreateRepositoryMock() *RepositoryMock
CreateRepositoryMock returns a repositoryMock
func (RepositoryMock) AddNotificationService ¶ added in v2.1.0
func (r RepositoryMock) AddNotificationService(service NotificationService)
AddNotificationService is a mock
func (RepositoryMock) GetEventsBySequenceID ¶
func (r RepositoryMock) GetEventsBySequenceID(ctx context.Context, sequenceID string, opts ...QueryOption) ([]Event, error)
GetEventsBySequenceID is a mock
func (RepositoryMock) GetEventsBySequenceIDAndType ¶
func (r RepositoryMock) GetEventsBySequenceIDAndType(ctx context.Context, sequenceID string, eventType Event, opts ...QueryOption) ([]Event, error)
GetEventsBySequenceIDAndType is a mock
func (RepositoryMock) GetEventsByTimestamp ¶
func (r RepositoryMock) GetEventsByTimestamp(ctx context.Context, timestamp int64, opts ...QueryOption) ([]Event, error)
GetEventsByTimestamp is a mock
func (RepositoryMock) Load ¶
func (r RepositoryMock) Load(ctx context.Context, id string, aggr Aggregate) (deleted bool, err error)
Load is a mock
func (RepositoryMock) LoadEvents ¶ added in v2.2.0
func (r RepositoryMock) LoadEvents(ctx context.Context, opts ...QueryOption) ([]Event, error)
LoadEvents is a mock
func (RepositoryMock) Save ¶
func (r RepositoryMock) Save(ctx context.Context, events ...Event) error
Save is a mock
func (RepositoryMock) SaveTransaction ¶
func (r RepositoryMock) SaveTransaction(ctx context.Context, events ...Event) (StoreTransaction, error)
SaveTransaction is a mock
func (RepositoryMock) UnmarshalRecords ¶ added in v2.3.0
func (r RepositoryMock) UnmarshalRecords(records []Record) ([]Event, error)
UnmarshalRecords is a mock
type Serializer ¶
type Serializer interface {
Unmarshal(data []byte, eventType string) (event Event, err error)
Marshal(event Event) (data []byte, err error)
}
Serializer is an interface that should be implemented if events need to be saved using a new storage format.
type SerializerMock ¶
SerializerMock is a mock
func CreateSerializerMock ¶
func CreateSerializerMock() *SerializerMock
CreateSerializerMock returns a serializerMock
type Store ¶
type Store interface {
NewTransaction(ctx context.Context, records ...Record) (StoreTransaction, error)
LoadByAggregate(ctx context.Context, aggregateID string, opts ...QueryOption) ([]Record, error)
Load(ctx context.Context, opts ...QueryOption) ([]Record, error)
// Deprecated: Use Load(ctx, store.BySequenceID(...))
LoadBySequenceID(ctx context.Context, sequenceID string, opts ...QueryOption) (record []Record, err error)
// Deprecated: Use Load(ctx, store.BySequenceID(...), store.ByType(...))
LoadBySequenceIDAndType(ctx context.Context, sequenceID string, eventType string, opts ...QueryOption) (records []Record, err error)
// Deprecated: Use Load(ctx, store.ByTimestamp(...))
LoadByTimestamp(ctx context.Context, timestamp int64, opts ...QueryOption) (record []Record, err error)
}
Store is the interface implemented by the data stores that can be used as back end for the event source.
type StoreMock ¶
StoreMock is a mock
func (StoreMock) LoadByAggregate ¶
func (o StoreMock) LoadByAggregate(ctx context.Context, aggregateID string, opts ...QueryOption) (record []Record, err error)
LoadByAggregate is a mock
func (StoreMock) LoadBySequenceID ¶
func (o StoreMock) LoadBySequenceID(ctx context.Context, sequenceID string, opts ...QueryOption) (record []Record, err error)
LoadBySequenceID is a mock
func (StoreMock) LoadBySequenceIDAndType ¶
func (o StoreMock) LoadBySequenceIDAndType(ctx context.Context, sequenceID string, eventType string, opts ...QueryOption) (record []Record, err error)
LoadBySequenceIDAndType is a mock
func (StoreMock) LoadByTimestamp ¶
func (o StoreMock) LoadByTimestamp(ctx context.Context, timestamp int64, opts ...QueryOption) (record []Record, err error)
LoadByTimestamp is a mock
func (StoreMock) NewTransaction ¶
NewTransaction is a mock
type StoreTransaction ¶
StoreTransaction encapsulates a write operation to a Store, allowing the caller to roll back the operation.
type StoreTransactionMock ¶
StoreTransactionMock is a mock
func CreateStoreTransactionMock ¶
func CreateStoreTransactionMock() *StoreTransactionMock
CreateStoreTransactionMock returns a store transaction mock
func (StoreTransactionMock) GetRecords ¶ added in v2.3.0
func (o StoreTransactionMock) GetRecords() []Record
GetRecords is a mock
func (StoreTransactionMock) Rollback ¶
func (o StoreTransactionMock) Rollback() error
Rollback is a mock