Use sessions in migration code
This commit is contained in:
parent
996a207590
commit
1921f80a4a
|
@ -18,6 +18,7 @@ package migration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"code.vikunja.io/api/pkg/db"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
"code.vikunja.io/api/pkg/files"
|
"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)
|
labels := make(map[string]*models.Label)
|
||||||
|
|
||||||
|
s := db.NewSession()
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
// Create all namespaces
|
// Create all namespaces
|
||||||
for _, n := range str {
|
for _, n := range str {
|
||||||
err = n.Create(s, user)
|
err = n.Create(s, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,8 +59,9 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
|
||||||
needsDefaultBucket := false
|
needsDefaultBucket := false
|
||||||
|
|
||||||
l.NamespaceID = n.ID
|
l.NamespaceID = n.ID
|
||||||
err = l.Create(user)
|
err = l.Create(s, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,11 +73,13 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
|
||||||
|
|
||||||
file, err := files.Create(backgroundFile, "", uint64(backgroundFile.Len()), user)
|
file, err := files.Create(backgroundFile, "", uint64(backgroundFile.Len()), user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = models.SetListBackground(l.ID, file)
|
err = models.SetListBackground(s, l.ID, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,6 +97,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
|
||||||
bucket.ListID = l.ID
|
bucket.ListID = l.ID
|
||||||
err = bucket.Create(s, user)
|
err = bucket.Create(s, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
buckets[oldID] = bucket
|
buckets[oldID] = bucket
|
||||||
|
@ -113,6 +122,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
|
||||||
t.ListID = l.ID
|
t.ListID = l.ID
|
||||||
err = t.Create(s, user)
|
err = t.Create(s, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,6 +144,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
|
||||||
rt.ListID = t.ListID
|
rt.ListID = t.ListID
|
||||||
err = rt.Create(s, user)
|
err = rt.Create(s, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Debugf("[creating structure] Created related task %d", rt.ID)
|
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)
|
err = taskRel.Create(s, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,6 +178,7 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
|
||||||
fr := ioutil.NopCloser(bytes.NewReader(a.File.FileContent))
|
fr := ioutil.NopCloser(bytes.NewReader(a.File.FileContent))
|
||||||
err = a.NewAttachment(s, fr, a.File.Name, a.File.Size, user)
|
err = a.NewAttachment(s, fr, a.File.Name, a.File.Size, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Debugf("[creating structure] Created new attachment %d", a.ID)
|
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 {
|
if !exists {
|
||||||
err = label.Create(s, user)
|
err = label.Create(s, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Debugf("[creating structure] Created new label %d", label.ID)
|
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)
|
err = lt.Create(s, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Debugf("[creating structure] Associated task %d with label %d", t.ID, lb.ID)
|
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}
|
b := &models.Bucket{ListID: l.ID}
|
||||||
bucketsIn, _, _, err := b.ReadAll(s, user, "", 1, 1)
|
bucketsIn, _, _, err := b.ReadAll(s, user, "", 1, 1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
buckets := bucketsIn.([]*models.Bucket)
|
buckets := bucketsIn.([]*models.Bucket)
|
||||||
err = buckets[0].Delete(s)
|
err = buckets[0].Delete(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
_ = s.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -222,5 +239,5 @@ func InsertFromStructure(str []*models.NamespaceWithLists, user *user.User) (err
|
||||||
|
|
||||||
log.Debugf("[creating structure] Done inserting new task structure")
|
log.Debugf("[creating structure] Done inserting new task structure")
|
||||||
|
|
||||||
return nil
|
return s.Commit()
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ func (mw *MigrationWeb) Migrate(c echo.Context) error {
|
||||||
return handler.HandleHTTPError(err, c)
|
return handler.HandleHTTPError(err, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = migration.SetMigrationStatus(ms, user)
|
err = migration.SetMigrationStatus(s, ms, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return handler.HandleHTTPError(err, c)
|
return handler.HandleHTTPError(err, c)
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ func (mw *MigrationWeb) Status(c echo.Context) error {
|
||||||
return handler.HandleHTTPError(err, c)
|
return handler.HandleHTTPError(err, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
status, err := migration.GetMigrationStatus(ms, user)
|
status, err := migration.GetMigrationStatus(s, ms, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return handler.HandleHTTPError(err, c)
|
return handler.HandleHTTPError(err, c)
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ package migration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
"xorm.io/xorm"
|
||||||
|
|
||||||
"code.vikunja.io/api/pkg/user"
|
"code.vikunja.io/api/pkg/user"
|
||||||
)
|
)
|
||||||
|
@ -36,18 +37,21 @@ func (s *Status) TableName() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetMigrationStatus sets the migration status for a user
|
// 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{
|
status := &Status{
|
||||||
UserID: u.ID,
|
UserID: u.ID,
|
||||||
MigratorName: m.Name(),
|
MigratorName: m.Name(),
|
||||||
}
|
}
|
||||||
_, err = x.Insert(status)
|
_, err = s.Insert(status)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMigrationStatus returns the migration status for a migration and a user
|
// 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{}
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user