From d27b62db6e89a5184405920b2ea6f48eb75f64c2 Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 19 Sep 2024 09:26:02 +0200 Subject: [PATCH] fix(task): cleanup old task positions and task buckets when adding an updated or created task to filter (cherry picked from commit 2123da49a38e8683a2a0272b89617634d45f7f45) --- pkg/models/listeners.go | 20 ++++++++++++++++++++ pkg/models/saved_filters.go | 7 ++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pkg/models/listeners.go b/pkg/models/listeners.go index 9c0866afe..7bdf8def7 100644 --- a/pkg/models/listeners.go +++ b/pkg/models/listeners.go @@ -32,6 +32,7 @@ import ( "code.vikunja.io/api/pkg/user" "github.com/ThreeDotsLabs/watermill/message" + "xorm.io/builder" "xorm.io/xorm" ) @@ -725,6 +726,8 @@ func (l *UpdateTaskInSavedFilterViews) Handle(msg *message.Message) (err error) taskBuckets := []*TaskBucket{} taskPositions := []*TaskPosition{} + viewIDToCleanUp := []int64{} + for _, view := range kanbanFilterViews { filter, exists := filters[getSavedFilterIDFromProjectID(view.ProjectID)] if !exists { @@ -740,10 +743,27 @@ func (l *UpdateTaskInSavedFilterViews) Handle(msg *message.Message) (err error) if taskBucket != nil && taskPosition != nil { taskBuckets = append(taskBuckets, taskBucket) taskPositions = append(taskPositions, taskPosition) + viewIDToCleanUp = append(viewIDToCleanUp, view.ID) } } if len(taskBuckets) > 0 || len(taskPositions) > 0 { + _, err = s.And( + builder.Eq{"task_id": event.Task.ID}, + builder.In("project_view_id", viewIDToCleanUp), + ). + Delete(&TaskBucket{}) + if err != nil { + return + } + _, err = s.And( + builder.Eq{"task_id": event.Task.ID}, + builder.In("project_view_id", viewIDToCleanUp), + ). + Delete(&TaskPosition{}) + if err != nil { + return + } _, err = s.Insert(taskBuckets) if err != nil { return diff --git a/pkg/models/saved_filters.go b/pkg/models/saved_filters.go index b5f63a28e..4e19620e2 100644 --- a/pkg/models/saved_filters.go +++ b/pkg/models/saved_filters.go @@ -202,7 +202,12 @@ func (sf *SavedFilter) Update(s *xorm.Session, _ web.Auth) error { // Add all tasks which are not already in a bucket to the default bucket kanbanFilterViews := []*ProjectView{} - err = s.Where("project_id = ? and view_kind = ? and bucket_configuration_mode = ?", getProjectIDFromSavedFilterID(sf.ID), ProjectViewKindKanban, BucketConfigurationModeManual). + err = s.Where( + "project_id = ? and view_kind = ? and bucket_configuration_mode = ?", + getProjectIDFromSavedFilterID(sf.ID), + ProjectViewKindKanban, + BucketConfigurationModeManual, + ). Find(&kanbanFilterViews) if err != nil || len(kanbanFilterViews) == 0 { return err