Skip to content
This repository has been archived by the owner on Mar 16, 2021. It is now read-only.

Commit

Permalink
*: move events and aggregate types outside eventstore pkg.
Browse files Browse the repository at this point in the history
  • Loading branch information
sgotti committed Dec 13, 2017
1 parent 3e543bc commit 6d0aaca
Show file tree
Hide file tree
Showing 21 changed files with 1,526 additions and 1,499 deletions.
7 changes: 4 additions & 3 deletions aggregate/aggregate.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@ import (

"github.com/sorintlab/sircles/command/commands"
"github.com/sorintlab/sircles/common"
ep "github.com/sorintlab/sircles/events"
"github.com/sorintlab/sircles/eventstore"
"github.com/sorintlab/sircles/util"
)

type Aggregate interface {
ApplyEvents(events []*eventstore.StoredEvent) error
HandleCommand(command *commands.Command) ([]eventstore.Event, error)
HandleCommand(command *commands.Command) ([]ep.Event, error)
Version() int64
ID() string
AggregateType() eventstore.AggregateType
AggregateType() AggregateType
}

type Repository interface {
Expand All @@ -40,7 +41,7 @@ func ExecCommand(command *commands.Command, a Aggregate, es *eventstore.EventSto

// The events correlationID is the command correlationID
// The events causationID is the command ID
eventsData, err := eventstore.GenEventData(events, &command.CorrelationID, &command.ID, &groupID, &command.IssuerID)
eventsData, err := ep.GenEventData(events, &command.CorrelationID, &command.ID, &groupID, &command.IssuerID)
if err != nil {
return util.NilID, 0, err
}
Expand Down
7 changes: 4 additions & 3 deletions aggregate/aggregate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/pkg/errors"
uuid "github.com/satori/go.uuid"
"github.com/sorintlab/sircles/command/commands"
ep "github.com/sorintlab/sircles/events"
"github.com/sorintlab/sircles/eventstore"
"github.com/sorintlab/sircles/util"
)
Expand All @@ -33,7 +34,7 @@ type testData struct {
Aggregate Aggregate
State []*eventstore.StoredEvent
Command *commands.Command
Out []eventstore.Event
Out []ep.Event
Err error
}

Expand Down Expand Up @@ -62,7 +63,7 @@ func runTest(t *testing.T, test *testData) {
}
}

func toStoredEvents(events []eventstore.Event, aggregateType eventstore.AggregateType, aggregateID string) ([]*eventstore.StoredEvent, error) {
func toStoredEvents(events []ep.Event, aggregateType AggregateType, aggregateID string) ([]*eventstore.StoredEvent, error) {
storedEvents := make([]*eventstore.StoredEvent, len(events))
var version int64 = 1
for i, e := range events {
Expand All @@ -80,7 +81,7 @@ func toStoredEvents(events []eventstore.Event, aggregateType eventstore.Aggregat

e := &eventstore.StoredEvent{
ID: util.NewFromUUID(uuid.NewV4()),
EventType: e.EventType(),
EventType: e.EventType().String(),
Category: aggregateType.String(),
StreamID: aggregateID,
Data: data,
Expand Down
57 changes: 29 additions & 28 deletions aggregate/member.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/pkg/errors"
"github.com/sorintlab/sircles/command/commands"
"github.com/sorintlab/sircles/common"
ep "github.com/sorintlab/sircles/events"
"github.com/sorintlab/sircles/eventstore"
"github.com/sorintlab/sircles/models"
"github.com/sorintlab/sircles/util"
Expand Down Expand Up @@ -69,12 +70,12 @@ func (m *Member) ID() string {
return m.id.String()
}

func (m *Member) AggregateType() eventstore.AggregateType {
return eventstore.MemberAggregate
func (m *Member) AggregateType() AggregateType {
return MemberAggregate
}

func (m *Member) HandleCommand(command *commands.Command) ([]eventstore.Event, error) {
var events []eventstore.Event
func (m *Member) HandleCommand(command *commands.Command) ([]ep.Event, error) {
var events []ep.Event
var err error
switch command.CommandType {
case commands.CommandTypeCreateMember:
Expand All @@ -93,8 +94,8 @@ func (m *Member) HandleCommand(command *commands.Command) ([]eventstore.Event, e
return events, err
}

func (m *Member) HandleCreateMemberCommand(command *commands.Command) ([]eventstore.Event, error) {
events := []eventstore.Event{}
func (m *Member) HandleCreateMemberCommand(command *commands.Command) ([]ep.Event, error) {
events := []ep.Event{}

c := command.Data.(*commands.CreateMember)

Expand All @@ -115,25 +116,25 @@ func (m *Member) HandleCreateMemberCommand(command *commands.Command) ([]eventst
}
member.ID = m.id

events = append(events, eventstore.NewEventMemberCreated(member, c.MemberChangeID))
events = append(events, ep.NewEventMemberCreated(member, c.MemberChangeID))

if c.Avatar != nil {
events = append(events, eventstore.NewEventMemberAvatarSet(m.id, c.Avatar))
events = append(events, ep.NewEventMemberAvatarSet(m.id, c.Avatar))
}

if c.PasswordHash != "" {
events = append(events, eventstore.NewEventMemberPasswordSet(m.id, c.PasswordHash))
events = append(events, ep.NewEventMemberPasswordSet(m.id, c.PasswordHash))
}

if c.MatchUID != "" {
events = append(events, eventstore.NewEventMemberMatchUIDSet(m.id, c.MemberChangeID, c.MatchUID, ""))
events = append(events, ep.NewEventMemberMatchUIDSet(m.id, c.MemberChangeID, c.MatchUID, ""))
}

return events, nil
}

func (m *Member) HandleUpdateMemberCommand(command *commands.Command) ([]eventstore.Event, error) {
events := []eventstore.Event{}
func (m *Member) HandleUpdateMemberCommand(command *commands.Command) ([]ep.Event, error) {
events := []ep.Event{}

c := command.Data.(*commands.UpdateMember)

Expand Down Expand Up @@ -161,35 +162,35 @@ func (m *Member) HandleUpdateMemberCommand(command *commands.Command) ([]eventst
}
member.ID = m.id

events = append(events, eventstore.NewEventMemberUpdated(member, c.MemberChangeID, m.userName, m.email))
events = append(events, ep.NewEventMemberUpdated(member, c.MemberChangeID, m.userName, m.email))

if c.Avatar != nil {
events = append(events, eventstore.NewEventMemberAvatarSet(m.id, c.Avatar))
events = append(events, ep.NewEventMemberAvatarSet(m.id, c.Avatar))
}

return events, nil
}

func (m *Member) HandleSetMemberPasswordCommand(command *commands.Command) ([]eventstore.Event, error) {
events := []eventstore.Event{}
func (m *Member) HandleSetMemberPasswordCommand(command *commands.Command) ([]ep.Event, error) {
events := []ep.Event{}

c := command.Data.(*commands.SetMemberPassword)

events = append(events, eventstore.NewEventMemberPasswordSet(m.id, c.PasswordHash))
events = append(events, ep.NewEventMemberPasswordSet(m.id, c.PasswordHash))

return events, nil
}

func (m *Member) HandleSetMemberMatchUIDCommand(command *commands.Command) ([]eventstore.Event, error) {
events := []eventstore.Event{}
func (m *Member) HandleSetMemberMatchUIDCommand(command *commands.Command) ([]ep.Event, error) {
events := []ep.Event{}

c := command.Data.(*commands.SetMemberMatchUID)

if _, ok := m.setMatchUIDRequests[c.MemberChangeID]; ok {
return nil, nil
}

events = append(events, eventstore.NewEventMemberMatchUIDSet(m.id, c.MemberChangeID, c.MatchUID, m.matchUID))
events = append(events, ep.NewEventMemberMatchUIDSet(m.id, c.MemberChangeID, c.MatchUID, m.matchUID))

return events, nil
}
Expand All @@ -206,16 +207,16 @@ func (m *Member) ApplyEvents(events []*eventstore.StoredEvent) error {
func (m *Member) ApplyEvent(event *eventstore.StoredEvent) error {
log.Debugf("event: %v", event)

data, err := event.UnmarshalData()
data, err := ep.UnmarshalData(event)
if err != nil {
return err
}

m.version = event.Version

switch event.EventType {
case eventstore.EventTypeMemberCreated:
data := data.(*eventstore.EventMemberCreated)
switch ep.EventType(event.EventType) {
case ep.EventTypeMemberCreated:
data := data.(*ep.EventMemberCreated)

m.created = true

Expand All @@ -226,8 +227,8 @@ func (m *Member) ApplyEvent(event *eventstore.StoredEvent) error {

m.createRequests[data.MemberChangeID] = struct{}{}

case eventstore.EventTypeMemberUpdated:
data := data.(*eventstore.EventMemberUpdated)
case ep.EventTypeMemberUpdated:
data := data.(*ep.EventMemberUpdated)

m.userName = data.UserName
m.fullName = data.FullName
Expand All @@ -236,8 +237,8 @@ func (m *Member) ApplyEvent(event *eventstore.StoredEvent) error {

m.updateRequests[data.MemberChangeID] = struct{}{}

case eventstore.EventTypeMemberMatchUIDSet:
data := data.(*eventstore.EventMemberMatchUIDSet)
case ep.EventTypeMemberMatchUIDSet:
data := data.(*ep.EventMemberMatchUIDSet)

m.matchUID = data.MatchUID

Expand Down
21 changes: 11 additions & 10 deletions aggregate/member_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"testing"

"github.com/sorintlab/sircles/command/commands"
ep "github.com/sorintlab/sircles/events"
"github.com/sorintlab/sircles/eventstore"
"github.com/sorintlab/sircles/util"
)
Expand All @@ -30,15 +31,15 @@ func TestCreateMember(t *testing.T) {
MemberChangeID: memberChangeID,
})

out := []eventstore.Event{
&eventstore.EventMemberCreated{
out := []ep.Event{
&ep.EventMemberCreated{
IsAdmin: false,
UserName: "user01",
FullName: "User 01",
Email: "user01@example.com",
MemberChangeID: memberChangeID,
},
&eventstore.EventMemberPasswordSet{
&ep.EventMemberPasswordSet{
PasswordHash: "passwordHash",
},
}
Expand Down Expand Up @@ -104,15 +105,15 @@ func setupMember(t *testing.T, memberID util.ID) []*eventstore.StoredEvent {
MemberChangeID: memberChangeID,
})

out := []eventstore.Event{
&eventstore.EventMemberCreated{
out := []ep.Event{
&ep.EventMemberCreated{
IsAdmin: false,
UserName: "user01",
FullName: "User 01",
Email: "user01@example.com",
MemberChangeID: memberChangeID,
},
&eventstore.EventMemberPasswordSet{
&ep.EventMemberPasswordSet{
PasswordHash: "passwordHash",
},
}
Expand Down Expand Up @@ -153,8 +154,8 @@ func TestUpdateMember(t *testing.T) {
PrevEmail: "user01@example.com",
})

out := []eventstore.Event{
&eventstore.EventMemberUpdated{
out := []ep.Event{
&ep.EventMemberUpdated{
IsAdmin: false,
UserName: "updateduser01",
FullName: "Updated User 01",
Expand Down Expand Up @@ -209,8 +210,8 @@ func TestUpdateNotExistingMember(t *testing.T) {
MemberChangeID: memberChangeID,
})

out := []eventstore.Event{
&eventstore.EventMemberUpdated{
out := []ep.Event{
&ep.EventMemberUpdated{
IsAdmin: false,
UserName: "user01",
FullName: "User 01",
Expand Down
37 changes: 19 additions & 18 deletions aggregate/memberchange.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/sorintlab/sircles/command/commands"
"github.com/sorintlab/sircles/common"
ep "github.com/sorintlab/sircles/events"
"github.com/sorintlab/sircles/eventstore"
"github.com/sorintlab/sircles/models"
"github.com/sorintlab/sircles/util"
Expand Down Expand Up @@ -59,12 +60,12 @@ func (m *MemberChange) ID() string {
return m.id.String()
}

func (m *MemberChange) AggregateType() eventstore.AggregateType {
return eventstore.MemberChangeAggregate
func (m *MemberChange) AggregateType() AggregateType {
return MemberChangeAggregate
}

func (m *MemberChange) HandleCommand(command *commands.Command) ([]eventstore.Event, error) {
var events []eventstore.Event
func (m *MemberChange) HandleCommand(command *commands.Command) ([]ep.Event, error) {
var events []ep.Event
var err error

// skip if already completed
Expand All @@ -89,8 +90,8 @@ func (m *MemberChange) HandleCommand(command *commands.Command) ([]eventstore.Ev
return events, err
}

func (m *MemberChange) HandleRequestCreateMemberCommand(command *commands.Command) ([]eventstore.Event, error) {
events := []eventstore.Event{}
func (m *MemberChange) HandleRequestCreateMemberCommand(command *commands.Command) ([]ep.Event, error) {
events := []ep.Event{}

c := command.Data.(*commands.RequestCreateMember)

Expand All @@ -102,13 +103,13 @@ func (m *MemberChange) HandleRequestCreateMemberCommand(command *commands.Comman
}
member.ID = c.MemberID

events = append(events, eventstore.NewEventMemberChangeCreateRequested(m.id, member, c.MatchUID, c.PasswordHash, c.Avatar))
events = append(events, ep.NewEventMemberChangeCreateRequested(m.id, member, c.MatchUID, c.PasswordHash, c.Avatar))

return events, nil
}

func (m *MemberChange) HandleRequestUpdateMemberCommand(command *commands.Command) ([]eventstore.Event, error) {
events := []eventstore.Event{}
func (m *MemberChange) HandleRequestUpdateMemberCommand(command *commands.Command) ([]ep.Event, error) {
events := []ep.Event{}

c := command.Data.(*commands.RequestUpdateMember)

Expand All @@ -120,27 +121,27 @@ func (m *MemberChange) HandleRequestUpdateMemberCommand(command *commands.Comman
}
member.ID = c.MemberID

events = append(events, eventstore.NewEventMemberChangeUpdateRequested(m.id, member, c.Avatar, c.PrevUserName, c.PrevEmail))
events = append(events, ep.NewEventMemberChangeUpdateRequested(m.id, member, c.Avatar, c.PrevUserName, c.PrevEmail))

return events, nil
}

func (m *MemberChange) HandleRequestSetMemberMatchUIDCommand(command *commands.Command) ([]eventstore.Event, error) {
events := []eventstore.Event{}
func (m *MemberChange) HandleRequestSetMemberMatchUIDCommand(command *commands.Command) ([]ep.Event, error) {
events := []ep.Event{}

c := command.Data.(*commands.RequestSetMemberMatchUID)

events = append(events, eventstore.NewEventMemberChangeSetMatchUIDRequested(m.id, c.MemberID, c.MatchUID))
events = append(events, ep.NewEventMemberChangeSetMatchUIDRequested(m.id, c.MemberID, c.MatchUID))

return events, nil
}

func (m *MemberChange) HandleCompleteRequestCommand(command *commands.Command) ([]eventstore.Event, error) {
events := []eventstore.Event{}
func (m *MemberChange) HandleCompleteRequestCommand(command *commands.Command) ([]ep.Event, error) {
events := []ep.Event{}

c := command.Data.(*commands.CompleteRequest)

events = append(events, eventstore.NewEventMemberChangeCompleted(m.id, c.Error, c.Reason))
events = append(events, ep.NewEventMemberChangeCompleted(m.id, c.Error, c.Reason))

return events, nil
}
Expand All @@ -159,8 +160,8 @@ func (m *MemberChange) ApplyEvent(event *eventstore.StoredEvent) error {

m.version = event.Version

switch event.EventType {
case eventstore.EventTypeMemberChangeCompleted:
switch ep.EventType(event.EventType) {
case ep.EventTypeMemberChangeCompleted:
m.completed = true

}
Expand Down
Loading

0 comments on commit 6d0aaca

Please sign in to comment.