Documentation ¶
Index ¶
- Variables
- type Command
- type Engine
- func (engine *Engine) AddProjection(ctx context.Context, name string, handler projection.Handler, ...) error
- func (engine *Engine) Entity(ctx context.Context, behavior EntityBehavior) error
- func (engine *Engine) IsProjectionRunning(ctx context.Context, name string) (bool, error)
- func (engine *Engine) RemoveProjection(ctx context.Context, name string) error
- func (engine *Engine) SendCommand(ctx context.Context, entityID string, cmd Command, timeout time.Duration) (resultingState State, revision uint64, err error)
- func (engine *Engine) Start(ctx context.Context) error
- func (engine *Engine) Started() bool
- func (engine *Engine) Stop(ctx context.Context) error
- func (engine *Engine) Subscribe() (eventstream.Subscriber, error)
- type EntityBehavior
- type Event
- type Option
- type OptionFunc
- type State
Constants ¶
This section is empty.
Variables ¶
var ( // ErrEngineNotStarted is returned when the eGo engine has not started ErrEngineNotStarted = errors.New("eGo engine has not started") // ErrUndefinedEntityID is returned when sending a command to an undefined entity ErrUndefinedEntityID = errors.New("eGo entity id is not defined") // ErrCommandReplyUnmarshalling is returned when unmarshalling command reply failed ErrCommandReplyUnmarshalling = errors.New("failed to parse command reply") )
Functions ¶
This section is empty.
Types ¶
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine represents the engine that empowers the various entities
func NewEngine ¶
func NewEngine(name string, eventsStore eventstore.EventsStore, opts ...Option) *Engine
NewEngine creates an instance of Engine
func (*Engine) AddProjection ¶
func (engine *Engine) AddProjection(ctx context.Context, name string, handler projection.Handler, offsetStore offsetstore.OffsetStore, opts ...projection.Option) error
AddProjection add a projection to the running eGo engine and starts it
func (*Engine) Entity ¶
func (engine *Engine) Entity(ctx context.Context, behavior EntityBehavior) error
Entity creates an entity. This will return the entity path that can be used to send command to the entity
func (*Engine) IsProjectionRunning ¶ added in v3.1.1
IsProjectionRunning returns true when the projection is active and running One needs to check the error to see whether this function does not return a false negative
func (*Engine) RemoveProjection ¶ added in v3.1.1
RemoveProjection stops and removes a given projection from the engine
func (*Engine) SendCommand ¶
func (engine *Engine) SendCommand(ctx context.Context, entityID string, cmd Command, timeout time.Duration) (resultingState State, revision uint64, err error)
SendCommand sends command to a given entity ref. This will return: 1. the resulting state after the command has been handled and the emitted event persisted 2. nil when there is no resulting state or no event persisted 3. an error in case of error
func (*Engine) Subscribe ¶
func (engine *Engine) Subscribe() (eventstream.Subscriber, error)
Subscribe creates an events subscriber
type EntityBehavior ¶
type EntityBehavior interface { // ID defines the id that will be used in the event journal. // This helps track the entity in the events store. ID() string // InitialState returns the event sourced actor initial state. // This is set as the initial state when there are no snapshots found the entity InitialState() State // HandleCommand helps handle commands received by the event sourced actor. The command handlers define how to handle each incoming command, // which validations must be applied, and finally, which events will be persisted if any. When there is no event to be persisted a nil can // be returned as a no-op. Command handlers are the meat of the event sourced actor. // They encode the business rules of your event sourced actor and act as a guardian of the event sourced actor consistency. // The command eventSourcedHandler must first validate that the incoming command can be applied to the current model state. // Any decision should be solely based on the data passed in the commands and the state of the Behavior. // In case of successful validation, one or more events expressing the mutations are persisted. // Once the events are persisted, they are applied to the state producing a new valid state. // Every event emitted are processed one after the other in the same order they were emitted to guarantee consistency. // It is at the discretion of the application developer to know in which order a given command should return the list of events // This is really powerful when a command needs to return two events. For instance, an OpenAccount command can result in two events: one is AccountOpened and the second is AccountCredited HandleCommand(ctx context.Context, command Command, priorState State) (events []Event, err error) // HandleEvent handle events emitted by the command handlers. The event handlers are used to mutate the state of the event sourced actor by applying the events to it. // Event handlers must be pure functions as they will be used when instantiating the event sourced actor and replaying the event journal. HandleEvent(ctx context.Context, event Event, priorState State) (state State, err error) }
EntityBehavior defines an event sourced behavior when modeling a CQRS EntityBehavior.
type Option ¶
type Option interface { // Apply sets the Option value of a config. Apply(e *Engine) }
Option is the interface that applies a configuration option.