Use sessions in migration code

This commit is contained in:
kolaente 2020-12-23 01:52:28 +01:00
parent 996a207590
commit 1921f80a4a
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
3 changed files with 30 additions and 9 deletions

View File

@ -18,6 +18,7 @@ package migration
import (
"bytes"
"code.vikunja.io/api/pkg/db"
"io/ioutil"
"code.vikunja.io/api/pkg/files"
@ -34,10 +35,14 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
labels := make(map[string]*models.Label)
s := db.NewSession()
defer s.Close()
// Create all namespaces
for _, n := range str {
err = n.Create(s, user)
if err != nil {
_ = s.Rollback()
return
}
@ -54,8 +59,9 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
needsDefaultBucket := false
l.NamespaceID = n.ID
err = l.Create(user)
err = l.Create(s, user)
if err != nil {
_ = s.Rollback()
return
}
@ -67,11 +73,13 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
file, err := files.Create(backgroundFile, "", uint64(backgroundFile.Len()), user)
if err != nil {
_ = s.Rollback()
return err
}
err = models.SetListBackground(l.ID, file)
err = models.SetListBackground(s, l.ID, file)
if err != nil {
_ = s.Rollback()
return err
}
@ -89,6 +97,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
bucket.ListID = l.ID
err = bucket.Create(s, user)
if err != nil {
_ = s.Rollback()
return
}
buckets[oldID] = bucket
@ -113,6 +122,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
t.ListID = l.ID
err = t.Create(s, user)
if err != nil {
_ = s.Rollback()
return
}
@ -134,6 +144,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
rt.ListID = t.ListID
err = rt.Create(s, user)
if err != nil {
_ = s.Rollback()
return
}
log.Debugf("[creating structure] Created related task %d", rt.ID)
@ -147,6 +158,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
}
err = taskRel.Create(s, user)
if err != nil {
_ = s.Rollback()
return
}
@ -166,6 +178,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
fr := ioutil.NopCloser(bytes.NewReader(a.File.FileContent))
err = a.NewAttachment(s, fr, a.File.Name, a.File.Size, user)
if err != nil {
_ = s.Rollback()
return
}
log.Debugf("[creating structure] Created new attachment %d", a.ID)
@ -182,6 +195,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
if !exists {
err = label.Create(s, user)
if err != nil {
_ = s.Rollback()
return err
}
log.Debugf("[creating structure] Created new label %d", label.ID)
@ -195,6 +209,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
}
err = lt.Create(s, user)
if err != nil {
_ = s.Rollback()
return err
}
log.Debugf("[creating structure] Associated task %d with label %d", t.ID, lb.ID)
@ -206,11 +221,13 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
b := &models.Bucket{ListID: l.ID}
bucketsIn, _, _, err := b.ReadAll(s, user, "", 1, 1)
if err != nil {
_ = s.Rollback()
return err
}
buckets := bucketsIn.([]*models.Bucket)
err = buckets[0].Delete(s)
if err != nil {
_ = s.Rollback()
return err
}
}
@ -222,5 +239,5 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
log.Debugf("[creating structure] Done inserting new task structure")
return nil
return s.Commit()
}

View File

@ -72,7 +72,7 @@ func (mw *MigrationWeb) Migrate(c echo.Context) error {
return handler.HandleHTTPError(err, c)
}
err = migration.SetMigrationStatus(ms, user)
err = migration.SetMigrationStatus(s, ms, user)
if err != nil {
return handler.HandleHTTPError(err, c)
}
@ -89,7 +89,7 @@ func (mw *MigrationWeb) Status(c echo.Context) error {
return handler.HandleHTTPError(err, c)
}
status, err := migration.GetMigrationStatus(ms, user)
status, err := migration.GetMigrationStatus(s, ms, user)
if err != nil {
return handler.HandleHTTPError(err, c)
}

View File

@ -18,6 +18,7 @@ package migration
import (
"time"
"xorm.io/xorm"
"code.vikunja.io/api/pkg/user"
)
@ -36,18 +37,21 @@ func (s *Status) TableName() string {
}
// SetMigrationStatus sets the migration status for a user
func SetMigrationStatus(m Migrator, u *user.User) (err error) {
func SetMigrationStatus(s *xorm.Session, m Migrator, u *user.User) (err error) {
status := &Status{
UserID: u.ID,
MigratorName: m.Name(),
}
_, err = x.Insert(status)
_, err = s.Insert(status)
return
}
// GetMigrationStatus returns the migration status for a migration and a user
func GetMigrationStatus(m Migrator, u *user.User) (status *Status, err error) {
func GetMigrationStatus(s *xorm.Session, m Migrator, u *user.User) (status *Status, err error) {
status = &Status{}
_, err = x.Where("user_id = ? and migrator_name = ?", u.ID, m.Name()).Desc("id").Get(status)
_, err = s.
Where("user_id = ? and migrator_name = ?", u.ID, m.Name()).
Desc("id").
Get(status)
return
}