try with writemodel

This commit is contained in:
adlerhurst
2020-11-18 21:22:15 +01:00
parent 147782332f
commit 4d6497f6c1
12 changed files with 232 additions and 67 deletions

View File

@@ -9,8 +9,10 @@ type Aggregate struct {
Roles []string
}
func NewMemberAggregate(userID string) *ReadModel {
return &ReadModel{
ReadModel: *eventstore.NewReadModel(),
func NewAggregate(aggregate *eventstore.Aggregate, userID string, roles ...string) *Aggregate {
return &Aggregate{
Aggregate: *aggregate,
Roles: roles,
UserID: userID,
}
}

View File

@@ -2,6 +2,8 @@ package member
import (
"encoding/json"
"reflect"
"sort"
"github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/eventstore/v2"
@@ -15,8 +17,10 @@ const (
type ChangedEvent struct {
eventstore.BaseEvent `json:"-"`
Roles []string `json:"roles"`
UserID string `json:"userId"`
Roles []string `json:"roles,omitempty"`
UserID string `json:"userId,omitempty"`
hasChanged bool
}
func (e *ChangedEvent) CheckPrevious() bool {
@@ -29,15 +33,32 @@ func (e *ChangedEvent) Data() interface{} {
func NewChangedEvent(
base *eventstore.BaseEvent,
userID string,
roles ...string,
) *ChangedEvent {
current,
changed *WriteModel,
) (*ChangedEvent, error) {
return &ChangedEvent{
change := &ChangedEvent{
BaseEvent: *base,
Roles: roles,
UserID: userID,
}
if current.UserID != changed.UserID {
change.UserID = changed.UserID
change.hasChanged = true
}
sort.Strings(current.Roles)
sort.Strings(changed.Roles)
if !reflect.DeepEqual(current.Roles, changed.Roles) {
change.Roles = changed.Roles
change.hasChanged = true
}
if !change.hasChanged {
return nil, errors.ThrowPreconditionFailed(nil, "MEMBE-SeKlD", "Errors.NoChanges")
}
return change, nil
}
func ChangedEventMapper(event *repository.Event) (eventstore.EventReader, error) {

View File

@@ -2,6 +2,8 @@ package member
import "github.com/caos/zitadel/internal/eventstore/v2"
//ReadModel represenets the default member view.
// It's computed from events.
type ReadModel struct {
eventstore.ReadModel
@@ -9,6 +11,7 @@ type ReadModel struct {
Roles []string
}
//NewMemberReadModel is the default constructor of ReadModel
func NewMemberReadModel(userID string) *ReadModel {
return &ReadModel{
ReadModel: *eventstore.NewReadModel(),
@@ -16,6 +19,7 @@ func NewMemberReadModel(userID string) *ReadModel {
}
}
//Reduce extends eventstore.ReadModel
func (rm *ReadModel) Reduce() error {
for _, event := range rm.Events {
switch e := event.(type) {
@@ -29,3 +33,7 @@ func (rm *ReadModel) Reduce() error {
}
return rm.ReadModel.Reduce()
}
//WriteModel is used to create events
// It has no computed fields and represents the data
type WriteModel ReadModel