diff --git a/agent/app/repo/backup.go b/agent/app/repo/backup.go index 37cd8d18d..cd8538ea3 100644 --- a/agent/app/repo/backup.go +++ b/agent/app/repo/backup.go @@ -166,13 +166,29 @@ func (u *BackupRepo) GetRecord(opts ...DBOption) (*model.BackupRecord, error) { func (u *BackupRepo) SyncAll(data []model.BackupAccount) error { tx := global.DB.Begin() - if err := tx.Where("is_public = ?", 1).Delete(&model.BackupAccount{}).Error; err != nil { - tx.Rollback() - return err + var oldAccounts []model.BackupAccount + _ = tx.Where("is_public = ?", 1).Find(&oldAccounts).Error + oldAccountMap := make(map[string]uint) + for _, item := range oldAccounts { + oldAccountMap[item.Name] = item.ID } - if err := tx.Model(model.BackupAccount{}).Save(&data).Error; err != nil { - tx.Rollback() - return err + for _, item := range data { + if val, ok := oldAccountMap[item.Name]; ok { + item.ID = val + delete(oldAccountMap, item.Name) + } else { + item.ID = 0 + } + if err := tx.Model(model.BackupAccount{}).Where("id = ?", item.ID).Save(&item).Error; err != nil { + tx.Rollback() + return err + } + } + for _, val := range oldAccountMap { + if err := tx.Where("id = ?", val).Delete(&model.BackupAccount{}).Error; err != nil { + tx.Rollback() + return err + } } tx.Commit() return nil diff --git a/agent/init/migration/migrations/init.go b/agent/init/migration/migrations/init.go index 1f7f0cf43..8ca7c17cd 100644 --- a/agent/init/migration/migrations/init.go +++ b/agent/init/migration/migrations/init.go @@ -101,7 +101,7 @@ var InitSetting = &gormigrate.Migration{ return err } - if err := tx.Create(&model.Setting{Key: "EncryptKey", Value: common.RandStr(16)}).Error; err != nil { + if err := tx.Create(&model.Setting{Key: "EncryptKey", Value: global.CONF.Base.EncryptKey}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "SystemIP", Value: ""}).Error; err != nil { diff --git a/frontend/src/views/setting/backup-account/index.vue b/frontend/src/views/setting/backup-account/index.vue index dcca5bede..32ffc5780 100644 --- a/frontend/src/views/setting/backup-account/index.vue +++ b/frontend/src/views/setting/backup-account/index.vue @@ -1,5 +1,5 @@