diff --git a/pkg/models/project.go b/pkg/models/project.go index 00e99630b1..066e9927c5 100644 --- a/pkg/models/project.go +++ b/pkg/models/project.go @@ -1083,6 +1083,46 @@ func (p *Project) Delete(s *xorm.Session, a web.Auth) (err error) { } } + // Delete related project entities + views, err := getViewsForProject(s, p.ID) + if err != nil { + return + } + viewIDs := []int64{} + for _, v := range views { + viewIDs = append(viewIDs, v.ID) + } + + _, err = s.In("project_view_id", viewIDs).Delete(&Bucket{}) + if err != nil { + return + } + + _, err = s.In("id", viewIDs).Delete(&ProjectView{}) + if err != nil { + return + } + + err = removeFromFavorite(s, p.ID, a, FavoriteKindProject) + if err != nil { + return + } + + _, err = s.Where("project_id = ?", p.ID).Delete(&LinkSharing{}) + if err != nil { + return + } + + _, err = s.Where("project_id = ?", p.ID).Delete(&ProjectUser{}) + if err != nil { + return + } + + _, err = s.Where("project_id = ?", p.ID).Delete(&TeamProject{}) + if err != nil { + return + } + // Delete the project _, err = s.ID(p.ID).Delete(&Project{}) if err != nil { diff --git a/pkg/models/tasks.go b/pkg/models/tasks.go index f6e69fe5a7..f08b71123c 100644 --- a/pkg/models/tasks.go +++ b/pkg/models/tasks.go @@ -1486,6 +1486,18 @@ func (t *Task) Delete(s *xorm.Session, a web.Auth) (err error) { return } + // Delete all positions + _, err = s.Where("task_id = ?", t.ID).Delete(&TaskPosition{}) + if err != nil { + return + } + + // Delete all bucket relations + _, err = s.Where("task_id = ?", t.ID).Delete(&TaskBucket{}) + if err != nil { + return + } + // Actually delete the task _, err = s.ID(t.ID).Delete(Task{}) if err != nil {