From e4a0066e205d366ccd601ad805691d1613c6b489 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 19 Jul 2021 23:52:58 +0200 Subject: [PATCH] Make sure all associated entities of a task are deleted when the task is deleted --- pkg/models/tasks.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pkg/models/tasks.go b/pkg/models/tasks.go index 4820ab0949f..9479c42f94e 100644 --- a/pkg/models/tasks.go +++ b/pkg/models/tasks.go @@ -1353,6 +1353,49 @@ func (t *Task) Delete(s *xorm.Session, a web.Auth) (err error) { return err } + // Delete Favorites + err = removeFromFavorite(s, t.ID, a, FavoriteKindTask) + if err != nil { + return + } + + // Delete label associations + _, err = s.Where("task_id = ?", t.ID).Delete(&LabelTask{}) + if err != nil { + return + } + + // Delete task attachments + attachments, err := getTaskAttachmentsByTaskIDs(s, []int64{t.ID}) + if err != nil { + return err + } + for _, attachment := range attachments { + // Using the attachment delete method here because that takes care of removing all files properly + err = attachment.Delete(s, a) + if err != nil && !IsErrTaskAttachmentDoesNotExist(err) { + return err + } + } + + // Delete all comments + _, err = s.Where("task_id = ?", t.ID).Delete(&TaskComment{}) + if err != nil { + return + } + + // Delete all relations + _, err = s.Where("task_id = ? OR other_task_id = ?", t.ID, t.ID).Delete(&TaskRelation{}) + if err != nil { + return + } + + // Delete all reminders + _, err = s.Where("task_id = ?", t.ID).Delete(&TaskReminder{}) + if err != nil { + return + } + doer, _ := user.GetFromAuth(a) err = events.Dispatch(&TaskDeletedEvent{ Task: t,