Add saving export with user

This commit is contained in:
kolaente 2021-08-29 19:50:47 +02:00
parent 238a4387c2
commit 278ffad61e
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
3 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,43 @@
// Vikunja is a to-do list application to facilitate your life.
// Copyright 2018-2021 Vikunja and contributors. All rights reserved.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public Licensee as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public Licensee for more details.
//
// You should have received a copy of the GNU Affero General Public Licensee
// along with this program. If not, see <https://www.gnu.org/licenses/>.
package migration
import (
"src.techknowlogick.com/xormigrate"
"xorm.io/xorm"
)
type users20210829194722 struct {
ExportFileID int64 `xorm:"bigint null" json:"-"`
}
func (users20210829194722) TableName() string {
return "users"
}
func init() {
migrations = append(migrations, &xormigrate.Migration{
ID: "20210829194722",
Description: "Add data export file id to users",
Migrate: func(tx *xorm.Engine) error {
return tx.Sync2(users20210829194722{})
},
Rollback: func(tx *xorm.Engine) error {
return nil
},
})
}

View File

@ -59,25 +59,62 @@ func ExportUserData(u *user.User) (err error) {
err = exportListsAndTasks(s, u, dumpWriter)
if err != nil {
_ = s.Rollback()
return err
}
// Task attachment files
err = exportTaskAttachments(s, u, dumpWriter)
if err != nil {
_ = s.Rollback()
return err
}
// Saved filters
err = exportSavedFilters(s, u, dumpWriter)
if err != nil {
_ = s.Rollback()
return err
}
// Background files
err = exportListBackgrounds(s, u, dumpWriter)
if err != nil {
_ = s.Rollback()
return err
}
// Vikunja Version
err = dump.WriteBytesToZip("VERSION", []byte(version.Version), dumpWriter)
if err != nil {
_ = s.Rollback()
return err
}
stat, err := dumpFile.Stat()
if err != nil {
_ = s.Rollback()
return err
}
exportFile, err := files.Create(dumpFile, dumpFile.Name(), uint64(stat.Size()), u)
if err != nil {
_ = s.Rollback()
return err
}
// Save the file id with the user
u.ExportFileID = exportFile.ID
_, err = s.Cols("export_file_id").Update(u)
if err != nil {
_ = s.Rollback()
return
}
err = s.Commit()
if err != nil {
_ = s.Rollback()
return err
}
// Remove the old file
err = os.Remove(dumpFile.Name())
if err != nil {
return err
}

View File

@ -98,6 +98,8 @@ type User struct {
DeletionScheduledAt time.Time `xorm:"datetime null" json:"-"`
DeletionLastReminderSent time.Time `xorm:"datetime null" json:"-"`
ExportFileID int64 `xorm:"bigint null" json:"-"`
// A timestamp when this task was created. You cannot change this value.
Created time.Time `xorm:"created not null" json:"created"`
// A timestamp when this task was last updated. You cannot change this value.