diff --git a/domain/entity/base_aggregate_root.go b/domain/entity/base_aggregate_root.go index e67a1dd..6a00d21 100644 --- a/domain/entity/base_aggregate_root.go +++ b/domain/entity/base_aggregate_root.go @@ -4,8 +4,28 @@ import "github.com/tonybka/go-base-ddd/domain/event" type BaseAggregateRoot struct { BaseEntity + + domainEvents []event.IBaseDomainEvent +} + +func NewBaseAggregateRoot() (BaseAggregateRoot, error) { + base, err := NewBaseEntity() + if err != nil { + return BaseAggregateRoot{}, nil + } + + events := make([]event.IBaseDomainEvent, 0) + + return BaseAggregateRoot{ + BaseEntity: base, + domainEvents: events, + }, nil } func (aggregate *BaseAggregateRoot) AddEvent(event event.IBaseDomainEvent) { + aggregate.domainEvents = append(aggregate.domainEvents, event) +} +func (aggregate *BaseAggregateRoot) PendingEvents() []event.IBaseDomainEvent { + return aggregate.domainEvents } diff --git a/domain/entity/base_entity.go b/domain/entity/base_entity.go index 078d36d..56e986e 100644 --- a/domain/entity/base_entity.go +++ b/domain/entity/base_entity.go @@ -5,3 +5,13 @@ import "github.com/google/uuid" type BaseEntity struct { ID uuid.UUID } + +func NewBaseEntity() (BaseEntity, error) { + id, err := uuid.NewUUID() + + if err != nil { + return BaseEntity{}, err + } + + return BaseEntity{ID: id}, nil +} diff --git a/domain/event/base_domain_event.go b/domain/event/base_domain_event.go index ca3ecb6..fee5788 100644 --- a/domain/event/base_domain_event.go +++ b/domain/event/base_domain_event.go @@ -1,4 +1,8 @@ package event -type IBaseDomainEvent struct { +import "time" + +type IBaseDomainEvent interface { + EventName() string + OccurredAt() time.Time }