From f3cdd7d15f7d3e34c88142dfb3419c4c3f9564c6 Mon Sep 17 00:00:00 2001 From: kolaente Date: Tue, 19 Mar 2024 00:24:26 +0100 Subject: [PATCH] fix(views): import --- pkg/models/kanban.go | 1 + pkg/models/project_view.go | 7 +++ .../migration/create_from_structure.go | 52 ++++++++++++++++++- .../migration/create_from_structure_test.go | 7 ++- 4 files changed, 62 insertions(+), 5 deletions(-) diff --git a/pkg/models/kanban.go b/pkg/models/kanban.go index c5e769ed2..c2c79d10b 100644 --- a/pkg/models/kanban.go +++ b/pkg/models/kanban.go @@ -349,6 +349,7 @@ func (b *Bucket) Update(s *xorm.Session, _ web.Auth) (err error) { "title", "limit", "position", + "project_view_id", ). Update(b) return diff --git a/pkg/models/project_view.go b/pkg/models/project_view.go index 4ad9fc01b..84c95eab0 100644 --- a/pkg/models/project_view.go +++ b/pkg/models/project_view.go @@ -422,5 +422,12 @@ func CreateDefaultViewsForProject(s *xorm.Session, project *Project, a web.Auth, return } + project.Views = []*ProjectView{ + list, + gantt, + table, + kanban, + } + return } diff --git a/pkg/modules/migration/create_from_structure.go b/pkg/modules/migration/create_from_structure.go index 66bdeefa1..12bad93dd 100644 --- a/pkg/modules/migration/create_from_structure.go +++ b/pkg/modules/migration/create_from_structure.go @@ -126,6 +126,7 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas originalBuckets := project.Buckets originalBackgroundInformation := project.BackgroundInformation needsDefaultBucket := false + oldViews := project.Views // Saving the archived status to archive the project again after creating it var wasArchived bool @@ -182,6 +183,47 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas log.Debugf("[creating structure] Created bucket %d, old ID was %d", bucket.ID, oldID) } + // Create all views, create default views if we don't have any + if len(oldViews) > 0 { + for _, view := range oldViews { + view.ID = 0 + + if view.DefaultBucketID != 0 { + bucket, has := buckets[view.DefaultBucketID] + if has { + view.DefaultBucketID = bucket.ID + } + } + + if view.DoneBucketID != 0 { + bucket, has := buckets[view.DoneBucketID] + if has { + view.DoneBucketID = bucket.ID + } + } + + err = view.Create(s, user) + if err != nil { + return + } + } + } else { + // Only using the default views + // Add all buckets to the default kanban view + for _, view := range project.Views { + if view.ViewKind == models.ProjectViewKindKanban { + for _, b := range buckets { + b.ProjectViewID = view.ID + err = b.Update(s, user) + if err != nil { + return + } + } + break + } + } + } + log.Debugf("[creating structure] Creating %d tasks", len(tasks)) setBucketOrDefault := func(task *models.Task) { @@ -205,7 +247,6 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas oldid := t.ID t.ProjectID = project.ID err = t.Create(s, user) - if err != nil && models.IsErrTaskCannotBeEmpty(err) { continue } @@ -332,6 +373,14 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas // All tasks brought their own bucket with them, therefore the newly created default bucket is just extra space if !needsDefaultBucket { b := &models.Bucket{ProjectID: project.ID} + + for _, view := range project.Views { + if view.ViewKind == models.ProjectViewKindKanban { + b.ProjectViewID = view.ID + break + } + } + bucketsIn, _, _, err := b.ReadAll(s, user, "", 1, 1) if err != nil { return err @@ -341,6 +390,7 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas for _, b := range buckets { if b.Title == "Backlog" { newBacklogBucket = b + newBacklogBucket.ProjectID = project.ID break } } diff --git a/pkg/modules/migration/create_from_structure_test.go b/pkg/modules/migration/create_from_structure_test.go index 41395436a..8e0c63572 100644 --- a/pkg/modules/migration/create_from_structure_test.go +++ b/pkg/modules/migration/create_from_structure_test.go @@ -142,12 +142,11 @@ func TestInsertFromStructure(t *testing.T) { "title": testStructure[1].Title, "description": testStructure[1].Description, }, false) - db.AssertExists(t, "tasks", map[string]interface{}{ - "title": testStructure[1].Tasks[5].Title, + db.AssertExists(t, "task_buckets", map[string]interface{}{ + "task_id": testStructure[1].Tasks[5].ID, "bucket_id": testStructure[1].Buckets[0].ID, }, false) - db.AssertMissing(t, "tasks", map[string]interface{}{ - "title": testStructure[1].Tasks[6].Title, + db.AssertMissing(t, "task_buckets", map[string]interface{}{ "bucket_id": 1111, // No task with that bucket should exist }) db.AssertExists(t, "tasks", map[string]interface{}{