From 35a463c984b3f441360a651b4b528d284b8d84cb Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 10 Oct 2024 16:05:31 +0200 Subject: [PATCH] fix(filters): prevent position and bucket ID overriding position of existing tasks This fixes a bug where the task position in a task was updated and immediately overridden by the update event handler. Resolves https://community.vikunja.io/t/not-able-to-move-task-between-buckets-within-a-kanban-view-for-saved-filter/2882 --- pkg/models/saved_filters.go | 40 ++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/pkg/models/saved_filters.go b/pkg/models/saved_filters.go index 6f81d0ed0..983449b0a 100644 --- a/pkg/models/saved_filters.go +++ b/pkg/models/saved_filters.go @@ -332,21 +332,37 @@ func addTaskToFilter(s *xorm.Session, filter *SavedFilter, view *ProjectView, fa return nil, nil, err } - bucketID, err := getDefaultBucketID(s, view) + taskHasBucketInView, err := s.Where(builder.And( + builder.Eq{"task_id": task.ID}, + builder.Eq{"project_view_id": view.ID}, + )).Exist(&TaskBucket{}) + if !taskHasBucketInView { + bucketID, err := getDefaultBucketID(s, view) + if err != nil { + return nil, nil, err + } + + taskBucket = &TaskBucket{ + BucketID: bucketID, + TaskID: task.ID, + ProjectViewID: view.ID, + } + } + + // Check if a position for this task already exists + existingTaskPosition, err := s.Where(builder.And( + builder.Eq{"task_id": task.ID}, + builder.Eq{"project_view_id": view.ID}, + )).Exist(&TaskPosition{}) if err != nil { return nil, nil, err } - - taskBucket = &TaskBucket{ - BucketID: bucketID, - TaskID: task.ID, - ProjectViewID: view.ID, - } - - taskPosition = &TaskPosition{ - TaskID: task.ID, - ProjectViewID: view.ID, - Position: calculateDefaultPosition(task.Index, task.Position), + if !existingTaskPosition { + taskPosition = &TaskPosition{ + TaskID: task.ID, + ProjectViewID: view.ID, + Position: calculateDefaultPosition(task.Index, task.Position), + } } return