fix: add migration for non-unique task buckets

This commit is contained in:
kolaente
2025-06-25 11:12:24 +02:00
parent 8905f93947
commit 159961b5e0

View File

@@ -27,6 +27,63 @@ func init() {
ID: "20250624092830",
Description: "add unique index for task buckets",
Migrate: func(tx *xorm.Engine) error {
s := tx.NewSession()
defer s.Close()
err := s.Begin()
if err != nil {
return err
}
// First remove all duplicate entries
duplicateTaskBuckets := []taskBucket20240406125227{}
err = s.
Select("task_id, project_view_id").
GroupBy("task_id, project_view_id").
Having("count(*) > 1").
Find(&duplicateTaskBuckets)
if err != nil {
_ = s.Rollback()
return err
}
newTaskBuckets := []taskBucket20240406125227{}
for _, bucket := range duplicateTaskBuckets {
newBucket := taskBucket20240406125227{}
_, err = s.Where("task_id = ? AND project_view_id = ?", bucket.TaskID, bucket.ProjectViewID).
Get(&newBucket)
if err != nil {
_ = s.Rollback()
return err
}
newTaskBuckets = append(newTaskBuckets, newBucket)
}
for _, bucket := range duplicateTaskBuckets {
_, err = s.Where("task_id = ? AND project_view_id = ?", bucket.TaskID, bucket.ProjectViewID).
Delete(&taskBucket20240406125227{})
if err != nil {
_ = s.Rollback()
return err
}
}
for _, bucket := range newTaskBuckets {
_, err = s.Insert(&bucket)
if err != nil {
_ = s.Rollback()
return err
}
}
err = s.Commit()
if err != nil {
return err
}
// Then create the unique index
var query string
switch tx.Dialect().URI().DBType {
case schemas.MYSQL:
@@ -34,7 +91,7 @@ func init() {
default:
query = "CREATE UNIQUE INDEX IF NOT EXISTS UQE_task_buckets_task_project_view ON task_buckets (task_id, project_view_id)"
}
_, err := tx.Exec(query)
_, err = tx.Exec(query)
return err
},
Rollback: func(tx *xorm.Engine) error {