zitadel/internal/eventstore/v2/aggregate.go

101 lines
2.6 KiB
Go
Raw Normal View History

2020-11-06 21:09:19 +00:00
package eventstore
2020-11-27 12:29:35 +00:00
type aggregater interface {
//ID returns the aggreagte id
ID() string
//Type returns the aggregate type
Type() AggregateType
//Events returns the events which will be pushed
Events() []EventPusher
//ResourceOwner returns the organisation id which manages this aggregate
// resource owner is only on the inital push needed
// afterwards the resource owner of the previous event is taken
ResourceOwner() string
//Version represents the semantic version of the aggregate
Version() Version
//PreviouseSequence should return the sequence of the latest event of this aggregate
// stored in the eventstore
// it's set to the first event of this push transaction,
// later events consume the sequence of the previously pushed event of the aggregate
PreviousSequence() uint64
}
2020-11-11 16:51:44 +00:00
func NewAggregate(
id string,
typ AggregateType,
resourceOwner string,
version Version,
previousSequence uint64,
) *Aggregate {
2020-11-06 21:09:19 +00:00
return &Aggregate{
2020-11-11 16:51:44 +00:00
id: id,
typ: typ,
resourceOwner: resourceOwner,
version: version,
previousSequence: previousSequence,
events: []EventPusher{},
2020-11-06 21:09:19 +00:00
}
}
2020-11-23 10:36:58 +00:00
func AggregateFromWriteModel(
wm *WriteModel,
typ AggregateType,
version Version,
) *Aggregate {
return &Aggregate{
id: wm.AggregateID,
typ: typ,
resourceOwner: wm.ResourceOwner,
version: version,
previousSequence: wm.ProcessedSequence,
events: []EventPusher{},
}
}
2020-11-11 16:51:44 +00:00
//Aggregate is the basic implementation of aggregater
2020-11-06 21:09:19 +00:00
type Aggregate struct {
2020-11-11 16:51:44 +00:00
id string `json:"-"`
typ AggregateType `json:"-"`
events []EventPusher `json:"-"`
resourceOwner string `json:"-"`
version Version `json:"-"`
previousSequence uint64 `json:"-"`
2020-11-06 21:09:19 +00:00
}
2020-11-11 16:51:44 +00:00
//PushEvents adds all the events to the aggregate.
// The added events will be pushed to eventstore
func (a *Aggregate) PushEvents(events ...EventPusher) *Aggregate {
a.events = append(a.events, events...)
2020-11-06 21:09:19 +00:00
return a
}
2020-11-11 16:51:44 +00:00
//ID implements aggregater
func (a *Aggregate) ID() string {
return a.id
}
//Type implements aggregater
func (a *Aggregate) Type() AggregateType {
return a.typ
}
//Events implements aggregater
func (a *Aggregate) Events() []EventPusher {
return a.events
}
//ResourceOwner implements aggregater
func (a *Aggregate) ResourceOwner() string {
return a.resourceOwner
}
//Version implements aggregater
func (a *Aggregate) Version() Version {
return a.version
}
2020-11-06 21:09:19 +00:00
2020-11-11 16:51:44 +00:00
//PreviousSequence implements aggregater
func (a *Aggregate) PreviousSequence() uint64 {
return a.previousSequence
2020-11-06 21:09:19 +00:00
}