From 29c8fa8bde9fb75334f096f80bc1a9feeac1e68d Mon Sep 17 00:00:00 2001 From: Fabi <38692350+fgerschwiler@users.noreply.github.com> Date: Fri, 8 Oct 2021 16:17:12 +0200 Subject: [PATCH] fix: Fix project roles/grants projection (#2491) * fix: project role projections reduce change event * fix: project grant projections reduce change event * fix: project grant projections reduce change event * fix: add project removed event --- internal/query/projection/project_grant.go | 26 +++++++++----- .../query/projection/project_grant_test.go | 18 ---------- internal/query/projection/project_role.go | 34 +++++++++++++++---- 3 files changed, 46 insertions(+), 32 deletions(-) diff --git a/internal/query/projection/project_grant.go b/internal/query/projection/project_grant.go index dcd46240a5..0e89834b70 100644 --- a/internal/query/projection/project_grant.go +++ b/internal/query/projection/project_grant.go @@ -56,6 +56,10 @@ func (p *ProjectGrantProjection) reducers() []handler.AggregateReducer { Event: project.GrantRemovedType, Reduce: p.reduceProjectGrantRemoved, }, + { + Event: project.ProjectRemovedType, + Reduce: p.reduceProjectRemoved, + }, }, }, } @@ -103,10 +107,6 @@ func (p *ProjectGrantProjection) reduceProjectGrantChanged(event eventstore.Even logging.LogWithFields("HANDL-M00fH", "seq", event.Sequence(), "expectedType", project.GrantChangedType).Error("was not an event") return nil, errors.ThrowInvalidArgument(nil, "HANDL-g0fg4", "reduce.wrong.event.type") } - if e.RoleKeys == nil { - return crdb.NewNoOpStatement(e), nil - } - return crdb.NewUpdateStatement( e, []handler.Column{ @@ -127,10 +127,6 @@ func (p *ProjectGrantProjection) reduceProjectGrantCascadeChanged(event eventsto logging.LogWithFields("HANDL-K0fwR", "seq", event.Sequence(), "expectedType", project.GrantCascadeChangedType).Error("was not an event") return nil, errors.ThrowInvalidArgument(nil, "HANDL-ll9Ts", "reduce.wrong.event.type") } - if e.RoleKeys == nil { - return crdb.NewNoOpStatement(e), nil - } - return crdb.NewUpdateStatement( e, []handler.Column{ @@ -199,3 +195,17 @@ func (p *ProjectGrantProjection) reduceProjectGrantRemoved(event eventstore.Even }, ), nil } + +func (p *ProjectGrantProjection) reduceProjectRemoved(event eventstore.EventReader) (*handler.Statement, error) { + e, ok := event.(*project.ProjectRemovedEvent) + if !ok { + logging.LogWithFields("HANDL-Ms0fe", "seq", event.Sequence(), "expectedType", project.ProjectRemovedType).Error("was not an event") + return nil, errors.ThrowInvalidArgument(nil, "HANDL-gn9rw", "reduce.wrong.event.type") + } + return crdb.NewDeleteStatement( + e, + []handler.Condition{ + handler.NewCond(ProjectGrantColumnProjectID, e.Aggregate().ID), + }, + ), nil +} diff --git a/internal/query/projection/project_grant_test.go b/internal/query/projection/project_grant_test.go index 2c50258604..709445f554 100644 --- a/internal/query/projection/project_grant_test.go +++ b/internal/query/projection/project_grant_test.go @@ -143,24 +143,6 @@ func TestProjectGrantProjection_reduces(t *testing.T) { }, }, }, - { - name: "reduceProjectGrantChanged no changes", - args: args{ - event: getEvent(testEvent( - repository.EventType(project.GrantChangedType), - project.AggregateType, - []byte(`{}`), - ), project.GrantChangedEventMapper), - }, - reduce: (&ProjectGrantProjection{}).reduceProjectGrantChanged, - want: wantReduce{ - projection: ProjectGrantProjectionTable, - aggregateType: eventstore.AggregateType("project"), - sequence: 15, - previousSequence: 10, - executer: &testExecuter{}, - }, - }, { name: "reduceProjectGrantAdded", args: args{ diff --git a/internal/query/projection/project_role.go b/internal/query/projection/project_role.go index 2fcadd7d66..17283c2ec7 100644 --- a/internal/query/projection/project_role.go +++ b/internal/query/projection/project_role.go @@ -42,6 +42,10 @@ func (p *ProjectRoleProjection) reducers() []handler.AggregateReducer { Event: project.RoleRemovedType, Reduce: p.reduceProjectRoleRemoved, }, + { + Event: project.ProjectRemovedType, + Reduce: p.reduceProjectRemoved, + }, }, }, } @@ -90,14 +94,18 @@ func (p *ProjectRoleProjection) reduceProjectRoleChanged(event eventstore.EventR if e.DisplayName == nil && e.Group == nil { return crdb.NewNoOpStatement(e), nil } + columns := make([]handler.Column, 0, 7) + columns = append(columns, handler.NewCol(ProjectRoleColumnChangeDate, e.CreationDate()), + handler.NewCol(ProjectRoleColumnSequence, e.Sequence())) + if e.DisplayName != nil { + columns = append(columns, handler.NewCol(ProjectRoleColumnDisplayName, *e.DisplayName)) + } + if e.Group != nil { + columns = append(columns, handler.NewCol(ProjectRoleColumnGroupName, *e.Group)) + } return crdb.NewUpdateStatement( e, - []handler.Column{ - handler.NewCol(ProjectColumnChangeDate, e.CreationDate()), - handler.NewCol(ProjectRoleColumnSequence, e.Sequence()), - handler.NewCol(ProjectRoleColumnDisplayName, *e.DisplayName), - handler.NewCol(ProjectRoleColumnGroupName, *e.Group), - }, + columns, []handler.Condition{ handler.NewCond(ProjectRoleColumnKey, e.Key), handler.NewCond(ProjectRoleColumnProjectID, e.Aggregate().ID), @@ -119,3 +127,17 @@ func (p *ProjectRoleProjection) reduceProjectRoleRemoved(event eventstore.EventR }, ), nil } + +func (p *ProjectRoleProjection) reduceProjectRemoved(event eventstore.EventReader) (*handler.Statement, error) { + e, ok := event.(*project.ProjectRemovedEvent) + if !ok { + logging.LogWithFields("HANDL-hm90R", "seq", event.Sequence(), "expectedType", project.ProjectRemovedType).Error("was not an event") + return nil, errors.ThrowInvalidArgument(nil, "HANDL-l0geG", "reduce.wrong.event.type") + } + return crdb.NewDeleteStatement( + e, + []handler.Condition{ + handler.NewCond(ProjectRoleColumnProjectID, e.Aggregate().ID), + }, + ), nil +}