mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-12 02:54:20 +00:00
fix: state on user projection (#3109)
* fix: state on user projection * fix: state on user projection * don't change user state on HumanEmailVerifiedEvent
This commit is contained in:
parent
77de5bf97a
commit
542651707a
@ -47,9 +47,6 @@ func (wm *HumanInitCodeWriteModel) Reduce() error {
|
||||
wm.IsEmailVerified = false
|
||||
case *user.HumanEmailVerifiedEvent:
|
||||
wm.IsEmailVerified = true
|
||||
if wm.UserState == domain.UserStateInitial {
|
||||
wm.UserState = domain.UserStateActive
|
||||
}
|
||||
case *user.HumanInitialCodeAddedEvent:
|
||||
wm.Code = e.Code
|
||||
wm.CodeCreationDate = e.CreationDate()
|
||||
|
@ -94,6 +94,22 @@ func (p *UserProjection) reducers() []handler.AggregateReducer {
|
||||
Event: user.HumanRegisteredType,
|
||||
Reduce: p.reduceHumanRegistered,
|
||||
},
|
||||
{
|
||||
Event: user.HumanInitialCodeAddedType,
|
||||
Reduce: p.reduceHumanInitCodeAdded,
|
||||
},
|
||||
{
|
||||
Event: user.UserV1InitialCodeAddedType,
|
||||
Reduce: p.reduceHumanInitCodeAdded,
|
||||
},
|
||||
{
|
||||
Event: user.HumanInitializedCheckSucceededType,
|
||||
Reduce: p.reduceHumanInitCodeSucceeded,
|
||||
},
|
||||
{
|
||||
Event: user.UserV1InitializedCheckSucceededType,
|
||||
Reduce: p.reduceHumanInitCodeSucceeded,
|
||||
},
|
||||
{
|
||||
Event: user.UserLockedType,
|
||||
Reduce: p.reduceUserLocked,
|
||||
@ -201,7 +217,7 @@ func (p *UserProjection) reduceHumanAdded(event eventstore.Event) (*handler.Stat
|
||||
handler.NewCol(UserCreationDateCol, e.CreationDate()),
|
||||
handler.NewCol(UserChangeDateCol, e.CreationDate()),
|
||||
handler.NewCol(UserResourceOwnerCol, e.Aggregate().ResourceOwner),
|
||||
handler.NewCol(UserStateCol, domain.UserStateInitial),
|
||||
handler.NewCol(UserStateCol, domain.UserStateActive),
|
||||
handler.NewCol(UserSequenceCol, e.Sequence()),
|
||||
handler.NewCol(UserUsernameCol, e.UserName),
|
||||
handler.NewCol(UserTypeCol, domain.UserTypeHuman),
|
||||
@ -238,7 +254,7 @@ func (p *UserProjection) reduceHumanRegistered(event eventstore.Event) (*handler
|
||||
handler.NewCol(UserCreationDateCol, e.CreationDate()),
|
||||
handler.NewCol(UserChangeDateCol, e.CreationDate()),
|
||||
handler.NewCol(UserResourceOwnerCol, e.Aggregate().ResourceOwner),
|
||||
handler.NewCol(UserStateCol, domain.UserStateInitial),
|
||||
handler.NewCol(UserStateCol, domain.UserStateActive),
|
||||
handler.NewCol(UserSequenceCol, e.Sequence()),
|
||||
handler.NewCol(UserUsernameCol, e.UserName),
|
||||
handler.NewCol(UserTypeCol, domain.UserTypeHuman),
|
||||
@ -261,6 +277,40 @@ func (p *UserProjection) reduceHumanRegistered(event eventstore.Event) (*handler
|
||||
), nil
|
||||
}
|
||||
|
||||
func (p *UserProjection) reduceHumanInitCodeAdded(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*user.HumanInitialCodeAddedEvent)
|
||||
if !ok {
|
||||
logging.LogWithFields("HANDL-DSfe2", "seq", event.Sequence(), "expectedType", user.HumanInitialCodeAddedType).Error("wrong event type")
|
||||
return nil, errors.ThrowInvalidArgument(nil, "HANDL-Dvgws", "reduce.wrong.event.type")
|
||||
}
|
||||
return crdb.NewUpdateStatement(
|
||||
e,
|
||||
[]handler.Column{
|
||||
handler.NewCol(UserStateCol, domain.UserStateInitial),
|
||||
},
|
||||
[]handler.Condition{
|
||||
handler.NewCond(UserIDCol, e.Aggregate().ID),
|
||||
},
|
||||
), nil
|
||||
}
|
||||
|
||||
func (p *UserProjection) reduceHumanInitCodeSucceeded(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*user.HumanInitializedCheckSucceededEvent)
|
||||
if !ok {
|
||||
logging.LogWithFields("HANDL-Dgff2", "seq", event.Sequence(), "expectedType", user.HumanInitializedCheckSucceededType).Error("wrong event type")
|
||||
return nil, errors.ThrowInvalidArgument(nil, "HANDL-Dfvwq", "reduce.wrong.event.type")
|
||||
}
|
||||
return crdb.NewUpdateStatement(
|
||||
e,
|
||||
[]handler.Column{
|
||||
handler.NewCol(UserStateCol, domain.UserStateActive),
|
||||
},
|
||||
[]handler.Condition{
|
||||
handler.NewCond(UserIDCol, e.Aggregate().ID),
|
||||
},
|
||||
), nil
|
||||
}
|
||||
|
||||
func (p *UserProjection) reduceUserLocked(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*user.UserLockedEvent)
|
||||
if !ok {
|
||||
@ -656,7 +706,7 @@ func (p *UserProjection) reduceMachineAdded(event eventstore.Event) (*handler.St
|
||||
handler.NewCol(UserCreationDateCol, e.CreationDate()),
|
||||
handler.NewCol(UserChangeDateCol, e.CreationDate()),
|
||||
handler.NewCol(UserResourceOwnerCol, e.Aggregate().ResourceOwner),
|
||||
handler.NewCol(UserStateCol, domain.UserStateInitial),
|
||||
handler.NewCol(UserStateCol, domain.UserStateActive),
|
||||
handler.NewCol(UserSequenceCol, e.Sequence()),
|
||||
handler.NewCol(UserUsernameCol, e.UserName),
|
||||
handler.NewCol(UserTypeCol, domain.UserTypeMachine),
|
||||
|
@ -56,7 +56,7 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
anyArg{},
|
||||
anyArg{},
|
||||
"ro-id",
|
||||
domain.UserStateInitial,
|
||||
domain.UserStateActive,
|
||||
uint64(15),
|
||||
"user-name",
|
||||
domain.UserTypeHuman,
|
||||
@ -114,7 +114,7 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
anyArg{},
|
||||
anyArg{},
|
||||
"ro-id",
|
||||
domain.UserStateInitial,
|
||||
domain.UserStateActive,
|
||||
uint64(15),
|
||||
"user-name",
|
||||
domain.UserTypeHuman,
|
||||
@ -167,7 +167,7 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
anyArg{},
|
||||
anyArg{},
|
||||
"ro-id",
|
||||
domain.UserStateInitial,
|
||||
domain.UserStateActive,
|
||||
uint64(15),
|
||||
"user-name",
|
||||
domain.UserTypeHuman,
|
||||
@ -225,7 +225,7 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
anyArg{},
|
||||
anyArg{},
|
||||
"ro-id",
|
||||
domain.UserStateInitial,
|
||||
domain.UserStateActive,
|
||||
uint64(15),
|
||||
"user-name",
|
||||
domain.UserTypeHuman,
|
||||
@ -283,7 +283,7 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
anyArg{},
|
||||
anyArg{},
|
||||
"ro-id",
|
||||
domain.UserStateInitial,
|
||||
domain.UserStateActive,
|
||||
uint64(15),
|
||||
"user-name",
|
||||
domain.UserTypeHuman,
|
||||
@ -336,7 +336,7 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
anyArg{},
|
||||
anyArg{},
|
||||
"ro-id",
|
||||
domain.UserStateInitial,
|
||||
domain.UserStateActive,
|
||||
uint64(15),
|
||||
"user-name",
|
||||
domain.UserTypeHuman,
|
||||
@ -360,6 +360,118 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "reduceHumanInitCodeAdded",
|
||||
args: args{
|
||||
event: getEvent(testEvent(
|
||||
repository.EventType(user.HumanInitialCodeAddedType),
|
||||
user.AggregateType,
|
||||
[]byte(`{}`),
|
||||
), user.HumanInitialCodeAddedEventMapper),
|
||||
},
|
||||
reduce: (&UserProjection{}).reduceHumanInitCodeAdded,
|
||||
want: wantReduce{
|
||||
aggregateType: user.AggregateType,
|
||||
sequence: 15,
|
||||
previousSequence: 10,
|
||||
projection: UserTable,
|
||||
executer: &testExecuter{
|
||||
executions: []execution{
|
||||
{
|
||||
expectedStmt: "UPDATE zitadel.projections.users SET (state) = ($1) WHERE (id = $2)",
|
||||
expectedArgs: []interface{}{
|
||||
domain.UserStateInitial,
|
||||
"agg-id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "reduceUserV1InitCodeAdded",
|
||||
args: args{
|
||||
event: getEvent(testEvent(
|
||||
repository.EventType(user.UserV1InitialCodeAddedType),
|
||||
user.AggregateType,
|
||||
[]byte(`{}`),
|
||||
), user.HumanInitialCodeAddedEventMapper),
|
||||
},
|
||||
reduce: (&UserProjection{}).reduceHumanInitCodeAdded,
|
||||
want: wantReduce{
|
||||
aggregateType: user.AggregateType,
|
||||
sequence: 15,
|
||||
previousSequence: 10,
|
||||
projection: UserTable,
|
||||
executer: &testExecuter{
|
||||
executions: []execution{
|
||||
{
|
||||
expectedStmt: "UPDATE zitadel.projections.users SET (state) = ($1) WHERE (id = $2)",
|
||||
expectedArgs: []interface{}{
|
||||
domain.UserStateInitial,
|
||||
"agg-id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "reduceHumanInitCodeSucceeded",
|
||||
args: args{
|
||||
event: getEvent(testEvent(
|
||||
repository.EventType(user.HumanInitializedCheckSucceededType),
|
||||
user.AggregateType,
|
||||
[]byte(`{}`),
|
||||
), user.HumanInitializedCheckSucceededEventMapper),
|
||||
},
|
||||
reduce: (&UserProjection{}).reduceHumanInitCodeSucceeded,
|
||||
want: wantReduce{
|
||||
aggregateType: user.AggregateType,
|
||||
sequence: 15,
|
||||
previousSequence: 10,
|
||||
projection: UserTable,
|
||||
executer: &testExecuter{
|
||||
executions: []execution{
|
||||
{
|
||||
expectedStmt: "UPDATE zitadel.projections.users SET (state) = ($1) WHERE (id = $2)",
|
||||
expectedArgs: []interface{}{
|
||||
domain.UserStateActive,
|
||||
"agg-id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "reduceUserV1InitCodeAdded",
|
||||
args: args{
|
||||
event: getEvent(testEvent(
|
||||
repository.EventType(user.UserV1InitializedCheckSucceededType),
|
||||
user.AggregateType,
|
||||
[]byte(`{}`),
|
||||
), user.HumanInitializedCheckSucceededEventMapper),
|
||||
},
|
||||
reduce: (&UserProjection{}).reduceHumanInitCodeSucceeded,
|
||||
want: wantReduce{
|
||||
aggregateType: user.AggregateType,
|
||||
sequence: 15,
|
||||
previousSequence: 10,
|
||||
projection: UserTable,
|
||||
executer: &testExecuter{
|
||||
executions: []execution{
|
||||
{
|
||||
expectedStmt: "UPDATE zitadel.projections.users SET (state) = ($1) WHERE (id = $2)",
|
||||
expectedArgs: []interface{}{
|
||||
domain.UserStateActive,
|
||||
"agg-id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "reduceUserLocked",
|
||||
args: args{
|
||||
@ -1110,7 +1222,7 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
anyArg{},
|
||||
anyArg{},
|
||||
"ro-id",
|
||||
domain.UserStateInitial,
|
||||
domain.UserStateActive,
|
||||
uint64(15),
|
||||
"username",
|
||||
domain.UserTypeMachine,
|
||||
@ -1156,7 +1268,7 @@ func TestUserProjection_reduces(t *testing.T) {
|
||||
anyArg{},
|
||||
anyArg{},
|
||||
"ro-id",
|
||||
domain.UserStateInitial,
|
||||
domain.UserStateActive,
|
||||
uint64(15),
|
||||
"username",
|
||||
domain.UserTypeMachine,
|
||||
|
Loading…
Reference in New Issue
Block a user