1
0

fix(task): cleanup old task positions and task buckets when adding an updated or created task to filter

(cherry picked from commit 2123da49a38e8683a2a0272b89617634d45f7f45)
This commit is contained in:
kolaente 2024-09-19 09:26:02 +02:00
parent a21036340e
commit d27b62db6e
No known key found for this signature in database
GPG Key ID: F40E70337AB24C9B
2 changed files with 26 additions and 1 deletions

View File

@ -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

View File

@ -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