feat: handle instanceID in projections (#3442)

* feat: handle instanceID in projections

* rename functions

* fix key lock

* fix import
This commit is contained in:
Livio Amstutz
2022-04-19 08:26:12 +02:00
committed by GitHub
parent c25d853820
commit 1305c14e49
120 changed files with 2078 additions and 1209 deletions

View File

@@ -54,8 +54,8 @@ func (_ *IDPConfig) AggregateTypes() []models.AggregateType {
return []models.AggregateType{org.AggregateType, instance.AggregateType}
}
func (i *IDPConfig) CurrentSequence() (uint64, error) {
sequence, err := i.view.GetLatestIDPConfigSequence()
func (i *IDPConfig) CurrentSequence(instanceID string) (uint64, error) {
sequence, err := i.view.GetLatestIDPConfigSequence(instanceID)
if err != nil {
return 0, err
}
@@ -63,13 +63,30 @@ func (i *IDPConfig) CurrentSequence() (uint64, error) {
}
func (i *IDPConfig) EventQuery() (*models.SearchQuery, error) {
sequence, err := i.view.GetLatestIDPConfigSequence()
sequences, err := i.view.GetLatestIDPConfigSequences()
if err != nil {
return nil, err
}
return models.NewSearchQuery().
query := models.NewSearchQuery()
instances := make([]string, 0)
for _, sequence := range sequences {
for _, instance := range instances {
if sequence.InstanceID == instance {
break
}
}
instances = append(instances, sequence.InstanceID)
query.AddQuery().
AggregateTypeFilter(i.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence).
InstanceIDFilter(sequence.InstanceID)
}
return query.AddQuery().
AggregateTypeFilter(i.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence), nil
LatestSequenceFilter(0).
ExcludedInstanceIDsFilter(instances...).
SearchQuery(), nil
}
func (i *IDPConfig) Reduce(event *models.Event) (err error) {
@@ -97,7 +114,7 @@ func (i *IDPConfig) processIdpConfig(providerType iam_model.IDPProviderType, eve
if err != nil {
return err
}
idp, err = i.view.IDPConfigByID(idp.IDPConfigID)
idp, err = i.view.IDPConfigByID(idp.IDPConfigID, idp.InstanceID)
if err != nil {
return err
}
@@ -108,7 +125,7 @@ func (i *IDPConfig) processIdpConfig(providerType iam_model.IDPProviderType, eve
if err != nil {
return err
}
idp, err = i.view.IDPConfigByID(idp.IDPConfigID)
idp, err = i.view.IDPConfigByID(idp.IDPConfigID, idp.InstanceID)
if err != nil {
return err
}

View File

@@ -4,6 +4,7 @@ import (
"context"
"github.com/caos/logging"
"github.com/caos/zitadel/internal/config/systemdefaults"
"github.com/caos/zitadel/internal/domain"
"github.com/caos/zitadel/internal/eventstore"
@@ -67,8 +68,8 @@ func (_ *IDPProvider) AggregateTypes() []models.AggregateType {
return []es_models.AggregateType{instance.AggregateType, org.AggregateType}
}
func (i *IDPProvider) CurrentSequence() (uint64, error) {
sequence, err := i.view.GetLatestIDPProviderSequence()
func (i *IDPProvider) CurrentSequence(instanceID string) (uint64, error) {
sequence, err := i.view.GetLatestIDPProviderSequence(instanceID)
if err != nil {
return 0, err
}
@@ -76,13 +77,29 @@ func (i *IDPProvider) CurrentSequence() (uint64, error) {
}
func (i *IDPProvider) EventQuery() (*models.SearchQuery, error) {
sequence, err := i.view.GetLatestIDPProviderSequence()
sequences, err := i.view.GetLatestIDPProviderSequences()
if err != nil {
return nil, err
}
return es_models.NewSearchQuery().
query := es_models.NewSearchQuery()
instances := make([]string, 0)
for _, sequence := range sequences {
for _, instance := range instances {
if sequence.InstanceID == instance {
break
}
}
instances = append(instances, sequence.InstanceID)
query.AddQuery().
AggregateTypeFilter(i.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence).
InstanceIDFilter(sequence.InstanceID)
}
return query.AddQuery().
AggregateTypeFilter(i.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence), nil
LatestSequenceFilter(0).
ExcludedInstanceIDsFilter(instances...).
SearchQuery(), nil
}
func (i *IDPProvider) Reduce(event *models.Event) (err error) {
@@ -108,7 +125,7 @@ func (i *IDPProvider) processIdpProvider(event *models.Event) (err error) {
if err != nil {
return err
}
return i.view.DeleteIDPProvider(event.AggregateID, provider.IDPConfigID, event)
return i.view.DeleteIDPProvider(event.AggregateID, provider.IDPConfigID, event.InstanceID, event)
case instance.IDPConfigChangedEventType, org.IDPConfigChangedEventType:
esConfig := new(iam_view_model.IDPConfigView)
providerType := iam_model.IDPProviderTypeSystem
@@ -116,7 +133,7 @@ func (i *IDPProvider) processIdpProvider(event *models.Event) (err error) {
providerType = iam_model.IDPProviderTypeOrg
}
esConfig.AppendEvent(providerType, event)
providers, err := i.view.IDPProvidersByIDPConfigID(esConfig.IDPConfigID)
providers, err := i.view.IDPProvidersByIDPConfigID(esConfig.IDPConfigID, esConfig.InstanceID)
if err != nil {
return err
}
@@ -134,7 +151,7 @@ func (i *IDPProvider) processIdpProvider(event *models.Event) (err error) {
}
return i.view.PutIDPProviders(event, providers...)
case org.LoginPolicyRemovedEventType:
return i.view.DeleteIDPProvidersByAggregateID(event.AggregateID, event)
return i.view.DeleteIDPProvidersByAggregateID(event.AggregateID, event.InstanceID, event)
default:
return i.view.ProcessedIDPProviderSequence(event)
}

View File

@@ -8,7 +8,6 @@ import (
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/eventstore/v1/query"
"github.com/caos/zitadel/internal/eventstore/v1/spooler"
proj_view "github.com/caos/zitadel/internal/project/repository/view"
view_model "github.com/caos/zitadel/internal/project/repository/view/model"
"github.com/caos/zitadel/internal/repository/project"
)
@@ -55,8 +54,8 @@ func (_ *OrgProjectMapping) AggregateTypes() []es_models.AggregateType {
return []es_models.AggregateType{project.AggregateType}
}
func (p *OrgProjectMapping) CurrentSequence() (uint64, error) {
sequence, err := p.view.GetLatestOrgProjectMappingSequence()
func (p *OrgProjectMapping) CurrentSequence(instanceID string) (uint64, error) {
sequence, err := p.view.GetLatestOrgProjectMappingSequence(instanceID)
if err != nil {
return 0, err
}
@@ -64,11 +63,29 @@ func (p *OrgProjectMapping) CurrentSequence() (uint64, error) {
}
func (p *OrgProjectMapping) EventQuery() (*es_models.SearchQuery, error) {
sequence, err := p.view.GetLatestOrgProjectMappingSequence()
sequences, err := p.view.GetLatestOrgProjectMappingSequences()
if err != nil {
return nil, err
}
return proj_view.ProjectQuery(sequence.CurrentSequence), nil
query := es_models.NewSearchQuery()
instances := make([]string, 0)
for _, sequence := range sequences {
for _, instance := range instances {
if sequence.InstanceID == instance {
break
}
}
instances = append(instances, sequence.InstanceID)
query.AddQuery().
AggregateTypeFilter(p.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence).
InstanceIDFilter(sequence.InstanceID)
}
return query.AddQuery().
AggregateTypeFilter(p.AggregateTypes()...).
LatestSequenceFilter(0).
ExcludedInstanceIDsFilter(instances...).
SearchQuery(), nil
}
func (p *OrgProjectMapping) Reduce(event *es_models.Event) (err error) {
@@ -79,7 +96,7 @@ func (p *OrgProjectMapping) Reduce(event *es_models.Event) (err error) {
mapping.ProjectID = event.AggregateID
mapping.InstanceID = event.InstanceID
case project.ProjectRemovedType:
err := p.view.DeleteOrgProjectMappingsByProjectID(event.AggregateID)
err := p.view.DeleteOrgProjectMappingsByProjectID(event.AggregateID, event.InstanceID)
if err == nil {
return p.view.ProcessedOrgProjectMappingSequence(event)
}
@@ -93,7 +110,7 @@ func (p *OrgProjectMapping) Reduce(event *es_models.Event) (err error) {
case project.GrantRemovedType:
projectGrant := new(view_model.ProjectGrant)
projectGrant.SetData(event)
err := p.view.DeleteOrgProjectMappingsByProjectGrantID(event.AggregateID)
err := p.view.DeleteOrgProjectMappingsByProjectGrantID(event.AggregateID, event.InstanceID)
if err == nil {
return p.view.ProcessedOrgProjectMappingSequence(event)
}

View File

@@ -58,8 +58,8 @@ func (t *RefreshToken) AggregateTypes() []es_models.AggregateType {
return []es_models.AggregateType{user.AggregateType, project.AggregateType}
}
func (t *RefreshToken) CurrentSequence() (uint64, error) {
sequence, err := t.view.GetLatestRefreshTokenSequence()
func (t *RefreshToken) CurrentSequence(instanceID string) (uint64, error) {
sequence, err := t.view.GetLatestRefreshTokenSequence(instanceID)
if err != nil {
return 0, err
}
@@ -67,13 +67,29 @@ func (t *RefreshToken) CurrentSequence() (uint64, error) {
}
func (t *RefreshToken) EventQuery() (*es_models.SearchQuery, error) {
sequence, err := t.view.GetLatestRefreshTokenSequence()
sequences, err := t.view.GetLatestRefreshTokenSequences()
if err != nil {
return nil, err
}
return es_models.NewSearchQuery().
AggregateTypeFilter(user.AggregateType, project.AggregateType).
LatestSequenceFilter(sequence.CurrentSequence), nil
query := es_models.NewSearchQuery()
instances := make([]string, 0)
for _, sequence := range sequences {
for _, instance := range instances {
if sequence.InstanceID == instance {
break
}
}
instances = append(instances, sequence.InstanceID)
query.AddQuery().
AggregateTypeFilter(t.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence).
InstanceIDFilter(sequence.InstanceID)
}
return query.AddQuery().
AggregateTypeFilter(t.AggregateTypes()...).
LatestSequenceFilter(0).
ExcludedInstanceIDsFilter(instances...).
SearchQuery(), nil
}
func (t *RefreshToken) Reduce(event *es_models.Event) (err error) {
@@ -91,7 +107,7 @@ func (t *RefreshToken) Reduce(event *es_models.Event) (err error) {
logging.Log("EVEN-DBbn4").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(nil, "MODEL-BHn75", "could not unmarshal data")
}
token, err := t.view.RefreshTokenByID(e.TokenID)
token, err := t.view.RefreshTokenByID(e.TokenID, event.InstanceID)
if err != nil {
return err
}
@@ -106,11 +122,11 @@ func (t *RefreshToken) Reduce(event *es_models.Event) (err error) {
logging.Log("EVEN-BDbh3").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(nil, "MODEL-Bz653", "could not unmarshal data")
}
return t.view.DeleteRefreshToken(e.TokenID, event)
return t.view.DeleteRefreshToken(e.TokenID, event.InstanceID, event)
case user.UserLockedType,
user.UserDeactivatedType,
user.UserRemovedType:
return t.view.DeleteUserRefreshTokens(event.AggregateID, event)
return t.view.DeleteUserRefreshTokens(event.AggregateID, event.InstanceID, event)
default:
return t.view.ProcessedRefreshTokenSequence(event)
}

View File

@@ -64,8 +64,8 @@ func (_ *Token) AggregateTypes() []es_models.AggregateType {
return []es_models.AggregateType{user.AggregateType, project.AggregateType}
}
func (p *Token) CurrentSequence() (uint64, error) {
sequence, err := p.view.GetLatestTokenSequence()
func (p *Token) CurrentSequence(instanceID string) (uint64, error) {
sequence, err := p.view.GetLatestTokenSequence(instanceID)
if err != nil {
return 0, err
}
@@ -73,13 +73,29 @@ func (p *Token) CurrentSequence() (uint64, error) {
}
func (t *Token) EventQuery() (*es_models.SearchQuery, error) {
sequence, err := t.view.GetLatestTokenSequence()
sequences, err := t.view.GetLatestTokenSequences()
if err != nil {
return nil, err
}
return es_models.NewSearchQuery().
AggregateTypeFilter(user.AggregateType, project.AggregateType).
LatestSequenceFilter(sequence.CurrentSequence), nil
query := es_models.NewSearchQuery()
instances := make([]string, 0)
for _, sequence := range sequences {
for _, instance := range instances {
if sequence.InstanceID == instance {
break
}
}
instances = append(instances, sequence.InstanceID)
query.AddQuery().
AggregateTypeFilter(t.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence).
InstanceIDFilter(sequence.InstanceID)
}
return query.AddQuery().
AggregateTypeFilter(t.AggregateTypes()...).
LatestSequenceFilter(0).
ExcludedInstanceIDsFilter(instances...).
SearchQuery(), nil
}
func (t *Token) Reduce(event *es_models.Event) (err error) {
@@ -96,7 +112,7 @@ func (t *Token) Reduce(event *es_models.Event) (err error) {
user.HumanProfileChangedType:
user := new(view_model.UserView)
user.AppendEvent(event)
tokens, err := t.view.TokensByUserID(event.AggregateID)
tokens, err := t.view.TokensByUserID(event.AggregateID, event.InstanceID)
if err != nil {
return err
}
@@ -110,24 +126,24 @@ func (t *Token) Reduce(event *es_models.Event) (err error) {
if err != nil {
return err
}
return t.view.DeleteSessionTokens(id, event.AggregateID, event)
return t.view.DeleteSessionTokens(id, event.AggregateID, event.InstanceID, event)
case user.UserLockedType,
user.UserDeactivatedType,
user.UserRemovedType:
return t.view.DeleteUserTokens(event.AggregateID, event)
return t.view.DeleteUserTokens(event.AggregateID, event.InstanceID, event)
case user_repo.UserTokenRemovedType,
user_repo.PersonalAccessTokenRemovedType:
id, err := tokenIDFromRemovedEvent(event)
if err != nil {
return err
}
return t.view.DeleteToken(id, event)
return t.view.DeleteToken(id, event.InstanceID, event)
case user_repo.HumanRefreshTokenRemovedType:
id, err := refreshTokenIDFromRemovedEvent(event)
if err != nil {
return err
}
return t.view.DeleteTokensFromRefreshToken(id, event)
return t.view.DeleteTokensFromRefreshToken(id, event.InstanceID, event)
case project.ApplicationDeactivatedType,
project.ApplicationRemovedType:
application, err := applicationFromSession(event)
@@ -137,7 +153,7 @@ func (t *Token) Reduce(event *es_models.Event) (err error) {
return t.view.DeleteApplicationTokens(event, application.AppID)
case project.ProjectDeactivatedType,
project.ProjectRemovedType:
project, err := t.getProjectByID(context.Background(), event.AggregateID)
project, err := t.getProjectByID(context.Background(), event.AggregateID, event.InstanceID)
if err != nil {
return err
}
@@ -196,8 +212,8 @@ func (t *Token) OnSuccess() error {
return spooler.HandleSuccess(t.view.UpdateTokenSpoolerRunTimestamp)
}
func (t *Token) getProjectByID(ctx context.Context, projID string) (*proj_model.Project, error) {
query, err := proj_view.ProjectByIDQuery(projID, 0)
func (t *Token) getProjectByID(ctx context.Context, projID, instanceID string) (*proj_model.Project, error) {
query, err := proj_view.ProjectByIDQuery(projID, instanceID, 0)
if err != nil {
return nil, err
}

View File

@@ -65,8 +65,8 @@ func (_ *User) AggregateTypes() []es_models.AggregateType {
return []es_models.AggregateType{user_repo.AggregateType, org.AggregateType}
}
func (u *User) CurrentSequence() (uint64, error) {
sequence, err := u.view.GetLatestUserSequence()
func (u *User) CurrentSequence(instanceID string) (uint64, error) {
sequence, err := u.view.GetLatestUserSequence(instanceID)
if err != nil {
return 0, err
}
@@ -74,13 +74,29 @@ func (u *User) CurrentSequence() (uint64, error) {
}
func (u *User) EventQuery() (*es_models.SearchQuery, error) {
sequence, err := u.view.GetLatestUserSequence()
sequences, err := u.view.GetLatestUserSequences()
if err != nil {
return nil, err
}
return es_models.NewSearchQuery().
query := es_models.NewSearchQuery()
instances := make([]string, 0)
for _, sequence := range sequences {
for _, instance := range instances {
if sequence.InstanceID == instance {
break
}
}
instances = append(instances, sequence.InstanceID)
query.AddQuery().
AggregateTypeFilter(u.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence).
InstanceIDFilter(sequence.InstanceID)
}
return query.AddQuery().
AggregateTypeFilter(u.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence), nil
LatestSequenceFilter(0).
ExcludedInstanceIDsFilter(instances...).
SearchQuery(), nil
}
func (u *User) Reduce(event *es_models.Event) (err error) {
@@ -146,14 +162,14 @@ func (u *User) ProcessUser(event *es_models.Event) (err error) {
user_repo.HumanPasswordChangedType,
user_repo.HumanPasswordlessInitCodeAddedType,
user_repo.HumanPasswordlessInitCodeRequestedType:
user, err = u.view.UserByID(event.AggregateID)
user, err = u.view.UserByID(event.AggregateID, event.InstanceID)
if err != nil {
return err
}
err = user.AppendEvent(event)
case user_repo.UserDomainClaimedType,
user_repo.UserUserNameChangedType:
user, err = u.view.UserByID(event.AggregateID)
user, err = u.view.UserByID(event.AggregateID, event.InstanceID)
if err != nil {
return err
}
@@ -163,7 +179,7 @@ func (u *User) ProcessUser(event *es_models.Event) (err error) {
}
err = u.fillLoginNames(user)
case user_repo.UserRemovedType:
return u.view.DeleteUser(event.AggregateID, event)
return u.view.DeleteUser(event.AggregateID, event.InstanceID, event)
default:
return u.view.ProcessedUserSequence(event)
}
@@ -203,7 +219,7 @@ func (u *User) fillLoginNamesOnOrgUsers(event *es_models.Event) error {
if err != nil {
return err
}
users, err := u.view.UsersByOrgID(event.AggregateID)
users, err := u.view.UsersByOrgID(event.AggregateID, event.InstanceID)
if err != nil {
return err
}
@@ -221,7 +237,7 @@ func (u *User) fillPreferredLoginNamesOnOrgUsers(event *es_models.Event) error {
if !userLoginMustBeDomain {
return nil
}
users, err := u.view.UsersByOrgID(event.AggregateID)
users, err := u.view.UsersByOrgID(event.AggregateID, event.InstanceID)
if err != nil {
return err
}

View File

@@ -69,8 +69,8 @@ func (_ *ExternalIDP) AggregateTypes() []es_models.AggregateType {
return []es_models.AggregateType{user.AggregateType, instance.AggregateType, org.AggregateType}
}
func (i *ExternalIDP) CurrentSequence() (uint64, error) {
sequence, err := i.view.GetLatestExternalIDPSequence()
func (i *ExternalIDP) CurrentSequence(instanceID string) (uint64, error) {
sequence, err := i.view.GetLatestExternalIDPSequence(instanceID)
if err != nil {
return 0, err
}
@@ -78,13 +78,29 @@ func (i *ExternalIDP) CurrentSequence() (uint64, error) {
}
func (i *ExternalIDP) EventQuery() (*es_models.SearchQuery, error) {
sequence, err := i.view.GetLatestExternalIDPSequence()
sequences, err := i.view.GetLatestExternalIDPSequences()
if err != nil {
return nil, err
}
return es_models.NewSearchQuery().
query := es_models.NewSearchQuery()
instances := make([]string, 0)
for _, sequence := range sequences {
for _, instance := range instances {
if sequence.InstanceID == instance {
break
}
}
instances = append(instances, sequence.InstanceID)
query.AddQuery().
AggregateTypeFilter(i.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence).
InstanceIDFilter(sequence.InstanceID)
}
return query.AddQuery().
AggregateTypeFilter(i.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence), nil
LatestSequenceFilter(0).
ExcludedInstanceIDsFilter(instances...).
SearchQuery(), nil
}
func (i *ExternalIDP) Reduce(event *es_models.Event) (err error) {
@@ -111,9 +127,9 @@ func (i *ExternalIDP) processUser(event *es_models.Event) (err error) {
if err != nil {
return err
}
return i.view.DeleteExternalIDP(externalIDP.ExternalUserID, externalIDP.IDPConfigID, event)
return i.view.DeleteExternalIDP(externalIDP.ExternalUserID, externalIDP.IDPConfigID, externalIDP.InstanceID, event)
case user.UserRemovedType:
return i.view.DeleteExternalIDPsByUserID(event.AggregateID, event)
return i.view.DeleteExternalIDPsByUserID(event.AggregateID, event.InstanceID, event)
default:
return i.view.ProcessedExternalIDPSequence(event)
}
@@ -133,7 +149,7 @@ func (i *ExternalIDP) processIdpConfig(event *es_models.Event) (err error) {
} else {
configView.AppendEvent(iam_model.IDPProviderTypeOrg, event)
}
exterinalIDPs, err := i.view.ExternalIDPsByIDPConfigID(configView.IDPConfigID)
exterinalIDPs, err := i.view.ExternalIDPsByIDPConfigID(configView.IDPConfigID, configView.InstanceID)
if err != nil {
return err
}

View File

@@ -11,7 +11,6 @@ import (
"github.com/caos/zitadel/internal/eventstore/v1/query"
"github.com/caos/zitadel/internal/eventstore/v1/spooler"
"github.com/caos/zitadel/internal/repository/user"
"github.com/caos/zitadel/internal/user/repository/view"
view_model "github.com/caos/zitadel/internal/user/repository/view/model"
)
@@ -57,8 +56,8 @@ func (_ *UserSession) AggregateTypes() []models.AggregateType {
return []models.AggregateType{user.AggregateType}
}
func (u *UserSession) CurrentSequence() (uint64, error) {
sequence, err := u.view.GetLatestUserSessionSequence()
func (u *UserSession) CurrentSequence(instanceID string) (uint64, error) {
sequence, err := u.view.GetLatestUserSessionSequence(instanceID)
if err != nil {
return 0, err
}
@@ -66,11 +65,29 @@ func (u *UserSession) CurrentSequence() (uint64, error) {
}
func (u *UserSession) EventQuery() (*models.SearchQuery, error) {
sequence, err := u.view.GetLatestUserSessionSequence()
sequences, err := u.view.GetLatestUserSessionSequences()
if err != nil {
return nil, err
}
return view.UserQuery(sequence.CurrentSequence), nil
query := models.NewSearchQuery()
instances := make([]string, 0)
for _, sequence := range sequences {
for _, instance := range instances {
if sequence.InstanceID == instance {
break
}
}
instances = append(instances, sequence.InstanceID)
query.AddQuery().
AggregateTypeFilter(u.AggregateTypes()...).
LatestSequenceFilter(sequence.CurrentSequence).
InstanceIDFilter(sequence.InstanceID)
}
return query.AddQuery().
AggregateTypeFilter(u.AggregateTypes()...).
LatestSequenceFilter(0).
ExcludedInstanceIDsFilter(instances...).
SearchQuery(), nil
}
func (u *UserSession) Reduce(event *models.Event) (err error) {
@@ -95,7 +112,7 @@ func (u *UserSession) Reduce(event *models.Event) (err error) {
if err != nil {
return err
}
session, err = u.view.UserSessionByIDs(eventData.UserAgentID, event.AggregateID)
session, err = u.view.UserSessionByIDs(eventData.UserAgentID, event.AggregateID, event.InstanceID)
if err != nil {
if !errors.IsNotFound(err) {
return err
@@ -126,7 +143,7 @@ func (u *UserSession) Reduce(event *models.Event) (err error) {
user.UserIDPLinkCascadeRemovedType,
user.HumanPasswordlessTokenRemovedType,
user.HumanU2FTokenRemovedType:
sessions, err := u.view.UserSessionsByUserID(event.AggregateID)
sessions, err := u.view.UserSessionsByUserID(event.AggregateID, event.InstanceID)
if err != nil {
return err
}
@@ -143,7 +160,7 @@ func (u *UserSession) Reduce(event *models.Event) (err error) {
}
return u.view.PutUserSessions(sessions, event)
case user.UserRemovedType:
return u.view.DeleteUserSessions(event.AggregateID, event)
return u.view.DeleteUserSessions(event.AggregateID, event.InstanceID, event)
default:
return u.view.ProcessedUserSessionSequence(event)
}
@@ -169,7 +186,7 @@ func (u *UserSession) updateSession(session *view_model.UserSessionView, event *
}
func (u *UserSession) fillUserInfo(session *view_model.UserSessionView, id string) error {
user, err := u.view.UserByID(id)
user, err := u.view.UserByID(id, session.InstanceID)
if err != nil {
return err
}