From 7a5cb80569623bfdade87d6de1a65d630dff9f44 Mon Sep 17 00:00:00 2001 From: Silvan Date: Thu, 2 Dec 2021 15:07:45 +0100 Subject: [PATCH] fix(projections): delete app on remove project event (#2772) * fix(projections): delete app on remove project event * test(projection): project removed event in app * more effitient mig --- internal/query/projection/app.go | 18 ++++++++++++++ internal/query/projection/app_test.go | 27 +++++++++++++++++++++ migrations/cockroach/V1.97__delete_apps.sql | 6 +++++ 3 files changed, 51 insertions(+) create mode 100644 migrations/cockroach/V1.97__delete_apps.sql diff --git a/internal/query/projection/app.go b/internal/query/projection/app.go index d91186bbc..f9d4314b0 100644 --- a/internal/query/projection/app.go +++ b/internal/query/projection/app.go @@ -56,6 +56,10 @@ func (p *AppProjection) reducers() []handler.AggregateReducer { Event: project.ApplicationRemovedType, Reduce: p.reduceAppRemoved, }, + { + Event: project.ProjectRemovedType, + Reduce: p.reduceProjectRemoved, + }, { Event: project.APIConfigAddedType, Reduce: p.reduceAPIConfigAdded, @@ -213,6 +217,20 @@ func (p *AppProjection) reduceAppRemoved(event eventstore.EventReader) (*handler ), nil } +func (p *AppProjection) reduceProjectRemoved(event eventstore.EventReader) (*handler.Statement, error) { + e, ok := event.(*project.ProjectRemovedEvent) + if !ok { + logging.LogWithFields("HANDL-ZxQnj", "seq", event.Sequence(), "expectedType", project.ProjectRemovedType).Error("wrong event type") + return nil, errors.ThrowInvalidArgument(nil, "HANDL-DlUlO", "reduce.wrong.event.type") + } + return crdb.NewDeleteStatement( + e, + []handler.Condition{ + handler.NewCond(AppColumnProjectID, e.Aggregate().ID), + }, + ), nil +} + func (p *AppProjection) reduceAPIConfigAdded(event eventstore.EventReader) (*handler.Statement, error) { e, ok := event.(*project.APIConfigAddedEvent) if !ok { diff --git a/internal/query/projection/app_test.go b/internal/query/projection/app_test.go index a0524ee40..4e50daad6 100644 --- a/internal/query/projection/app_test.go +++ b/internal/query/projection/app_test.go @@ -186,6 +186,33 @@ func TestAppProjection_reduces(t *testing.T) { }, }, }, + { + name: "project.reduceProjectRemoved", + args: args{ + event: getEvent(testEvent( + repository.EventType(project.ProjectRemovedType), + project.AggregateType, + []byte(`{}`), + ), project.ProjectRemovedEventMapper), + }, + reduce: (&AppProjection{}).reduceProjectRemoved, + want: wantReduce{ + aggregateType: eventstore.AggregateType("project"), + sequence: 15, + previousSequence: 10, + projection: AppProjectionTable, + executer: &testExecuter{ + executions: []execution{ + { + expectedStmt: "DELETE FROM zitadel.projections.apps WHERE (project_id = $1)", + expectedArgs: []interface{}{ + "agg-id", + }, + }, + }, + }, + }, + }, { name: "project.reduceAPIConfigAdded", args: args{ diff --git a/migrations/cockroach/V1.97__delete_apps.sql b/migrations/cockroach/V1.97__delete_apps.sql new file mode 100644 index 000000000..b478e157b --- /dev/null +++ b/migrations/cockroach/V1.97__delete_apps.sql @@ -0,0 +1,6 @@ +DELETE FROM zitadel.projections.apps +WHERE project_id IN ( + SELECT aggregate_id + FROM eventstore.events + WHERE aggregate_type = 'project' AND event_type = 'project.removed' +);