Skip to content
This repository was archived by the owner on Mar 16, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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