diff --git a/backend/app/dto/request/app.go b/backend/app/dto/request/app.go index 1ae960bfd..40ad6b10b 100644 --- a/backend/app/dto/request/app.go +++ b/backend/app/dto/request/app.go @@ -58,6 +58,7 @@ type AppInstalledOperate struct { ForceDelete bool `json:"forceDelete"` DeleteBackup bool `json:"deleteBackup"` DeleteDB bool `json:"deleteDB"` + Backup bool `json:"backup"` } type AppInstalledUpdate struct { diff --git a/backend/app/service/app_install.go b/backend/app/service/app_install.go index 3272ac6e5..11c616e08 100644 --- a/backend/app/service/app_install.go +++ b/backend/app/service/app_install.go @@ -236,7 +236,7 @@ func (a *AppInstallService) Operate(req request.AppInstalledOperate) error { case constant.Sync: return syncById(install.ID) case constant.Upgrade: - return upgradeInstall(install.ID, req.DetailId) + return upgradeInstall(install.ID, req.DetailId, req.Backup) default: return errors.New("operate not support") } diff --git a/backend/app/service/app_utils.go b/backend/app/service/app_utils.go index 7665b956d..c30dee3a9 100644 --- a/backend/app/service/app_utils.go +++ b/backend/app/service/app_utils.go @@ -227,7 +227,7 @@ func deleteLink(ctx context.Context, install *model.AppInstall, deleteDB bool, f return appInstallResourceRepo.DeleteBy(ctx, appInstallResourceRepo.WithAppInstallId(install.ID)) } -func upgradeInstall(installId uint, detailId uint) error { +func upgradeInstall(installId uint, detailId uint, backup bool) error { install, err := appInstallRepo.GetFirst(commonRepo.WithByID(installId)) if err != nil { return err @@ -239,13 +239,14 @@ func upgradeInstall(installId uint, detailId uint) error { if install.Version == detail.Version { return errors.New("two version is same") } - if err := NewIBackupService().AppBackup(dto.CommonBackup{Name: install.App.Key, DetailName: install.Name}); err != nil { - return err - } - install.Status = constant.Upgrading go func() { + if backup { + if err = NewIBackupService().AppBackup(dto.CommonBackup{Name: install.App.Key, DetailName: install.Name}); err != nil { + global.LOG.Errorf(i18n.GetMsgWithMap("ErrAppBackup", map[string]interface{}{"name": install.Name, "err": err.Error()})) + } + } var upErr error defer func() { if upErr != nil { diff --git a/backend/i18n/lang/en.yaml b/backend/i18n/lang/en.yaml index a26950de4..5c3dcc174 100644 --- a/backend/i18n/lang/en.yaml +++ b/backend/i18n/lang/en.yaml @@ -44,6 +44,7 @@ ErrNoSuchHost: "Network connection failed" ErrImagePullTimeOut: 'Image pull timeout' ErrContainerNotFound: '{{ .name }} container does not exist' ErrContainerMsg: '{{ .name }} container is abnormal, please check the log on the container page for details' +ErrAppBackup: '{{ .name }} application backup failed err {{.err}}' #file ErrFileCanNotRead: "File can not read" diff --git a/backend/i18n/lang/zh-Hant.yaml b/backend/i18n/lang/zh-Hant.yaml index 56aa410c9..8587ea2bb 100644 --- a/backend/i18n/lang/zh-Hant.yaml +++ b/backend/i18n/lang/zh-Hant.yaml @@ -44,6 +44,7 @@ ErrNoSuchHost: "網路連接失敗" ErrImagePullTimeOut: "鏡像拉取超時" ErrContainerNotFound: '{{ .name }} 容器不存在' ErrContainerMsg: '{{ .name }} 容器異常,具體請在容器頁面查看日誌' +ErrAppBackup: '{{ .name }} 應用備份失敗 err {{.err}}' #file ErrFileCanNotRead: "此文件不支持預覽" diff --git a/backend/i18n/lang/zh.yaml b/backend/i18n/lang/zh.yaml index f06c04735..0807a525b 100644 --- a/backend/i18n/lang/zh.yaml +++ b/backend/i18n/lang/zh.yaml @@ -44,6 +44,7 @@ ErrNoSuchHost: "网络连接失败" ErrImagePullTimeOut: '镜像拉取超时' ErrContainerNotFound: '{{ .name }} 容器不存在' ErrContainerMsg: '{{ .name }} 容器异常,具体请在容器页面查看日志' +ErrAppBackup: '{{ .name }} 应用备份失败 err {{.err}}' #file ErrFileCanNotRead: "此文件不支持预览" diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 2a176aff4..757d1d26b 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1221,6 +1221,8 @@ const message = { cancelIgnore: 'Cancel ignore', ignoreList: 'ignore list', appHelper: 'Please view the installation instructions of some applications on the application details page', + backupApp: 'Backup application before upgrade', + backupAppHelper: 'If the upgrade fails, you can use the application backup to roll back', }, website: { website: 'Website', diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts index afb42b47c..721036dc5 100644 --- a/frontend/src/lang/modules/tw.ts +++ b/frontend/src/lang/modules/tw.ts @@ -1166,6 +1166,8 @@ const message = { cancelIgnore: '取消忽略', ignoreList: '忽略列表', appHelper: '部分應用的安裝使用說明請在應用詳情頁查看', + backupApp: '升級前備份應用', + backupAppHelper: '升級失敗可以使用應用備份回滾', }, website: { website: '網站', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 9d3734ada..cf192016c 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1166,6 +1166,8 @@ const message = { cancelIgnore: '取消忽略', ignoreList: '忽略列表', appHelper: '部分应用的安装使用说明请在应用详情页查看', + backupApp: '升级前备份应用', + backupAppHelper: '升级失败可以使用应用备份回滚', }, website: { website: '网站', diff --git a/frontend/src/views/app-store/installed/upgrade/index.vue b/frontend/src/views/app-store/installed/upgrade/index.vue index 5ffb50922..d1d3ca057 100644 --- a/frontend/src/views/app-store/installed/upgrade/index.vue +++ b/frontend/src/views/app-store/installed/upgrade/index.vue @@ -27,6 +27,10 @@ > + + + {{ $t('app.backupAppHelper') }} + @@ -59,6 +63,7 @@ const operateReq = reactive({ detailId: 0, operate: 'upgrade', installId: 0, + backup: true, }); const resourceName = ref(''); const rules = ref({