diff --git a/agent/app/api/v2/app.go b/agent/app/api/v2/app.go index cfdf7fb50..7e86446e9 100644 --- a/agent/app/api/v2/app.go +++ b/agent/app/api/v2/app.go @@ -192,39 +192,3 @@ func (b *BaseApi) GetAppListUpdate(c *gin.Context) { } helper.SuccessWithData(c, res) } - -// @Tags App -// @Summary Update appstore config -// @Accept json -// @Param request body request.AppstoreUpdate true "request" -// @Success 200 -// @Security ApiKeyAuth -// @Security Timestamp -// @Router /apps/store/update [post] -func (b *BaseApi) UpdateAppstoreConfig(c *gin.Context) { - var req request.AppstoreUpdate - if err := helper.CheckBindAndValidate(&req, c); err != nil { - return - } - err := appService.UpdateAppstoreConfig(req) - if err != nil { - helper.InternalServer(c, err) - return - } - helper.Success(c) -} - -// @Tags App -// @Summary Get appstore config -// @Success 200 {object} response.AppstoreConfig -// @Security ApiKeyAuth -// @Security Timestamp -// @Router /apps/store/config [get] -func (b *BaseApi) GetAppstoreConfig(c *gin.Context) { - res, err := appService.GetAppstoreConfig() - if err != nil { - helper.InternalServer(c, err) - return - } - helper.SuccessWithData(c, res) -} diff --git a/agent/app/dto/request/app.go b/agent/app/dto/request/app.go index 8e289bcc5..997c8956e 100644 --- a/agent/app/dto/request/app.go +++ b/agent/app/dto/request/app.go @@ -127,8 +127,3 @@ type AppUpdateVersion struct { AppInstallID uint `json:"appInstallID" validate:"required"` UpdateVersion string `json:"updateVersion"` } - -type AppstoreUpdate struct { - Scope string `json:"scope" validate:"required,oneof=UninstallDeleteImage UpgradeBackup UninstallDeleteBackup"` - Status string `json:"status"` -} diff --git a/agent/app/dto/response/app.go b/agent/app/dto/response/app.go index 4063a55c1..aed798067 100644 --- a/agent/app/dto/response/app.go +++ b/agent/app/dto/response/app.go @@ -163,9 +163,3 @@ type AppConfig struct { Params []AppParam `json:"params"` request.AppContainerConfig } - -type AppstoreConfig struct { - UninstallDeleteImage string `json:"uninstallDeleteImage"` - UpgradeBackup string `json:"upgradeBackup"` - UninstallDeleteBackup string `json:"uninstallDeleteBackup"` -} diff --git a/agent/app/service/app.go b/agent/app/service/app.go index c044c6f45..ae66ab809 100644 --- a/agent/app/service/app.go +++ b/agent/app/service/app.go @@ -46,9 +46,6 @@ type IAppService interface { GetAppUpdate() (*response.AppUpdateRes, error) GetAppDetailByID(id uint) (*response.AppDetailDTO, error) SyncAppListFromLocal(taskID string) - - GetAppstoreConfig() (*response.AppstoreConfig, error) - UpdateAppstoreConfig(req request.AppstoreUpdate) error } func NewIAppService() IAppService { @@ -1158,25 +1155,3 @@ func (a AppService) SyncAppListFromRemote(taskID string) (err error) { return nil } - -func (a AppService) UpdateAppstoreConfig(req request.AppstoreUpdate) error { - settingService := NewISettingService() - return settingService.Update(req.Scope, req.Status) -} - -func (a AppService) GetAppstoreConfig() (*response.AppstoreConfig, error) { - res := &response.AppstoreConfig{} - res.UninstallDeleteImage, _ = settingRepo.GetValueByKey("UninstallDeleteImage") - if res.UninstallDeleteImage == "" { - res.UninstallDeleteImage = "False" - } - res.UpgradeBackup, _ = settingRepo.GetValueByKey("UpgradeBackup") - if res.UpgradeBackup == "" { - res.UpgradeBackup = "False" - } - res.UninstallDeleteBackup, _ = settingRepo.GetValueByKey("UninstallDeleteBackup") - if res.UninstallDeleteBackup == "" { - res.UninstallDeleteBackup = "False" - } - return res, nil -} diff --git a/agent/router/ro_app.go b/agent/router/ro_app.go index 1fea6598b..49d06dccd 100644 --- a/agent/router/ro_app.go +++ b/agent/router/ro_app.go @@ -38,8 +38,6 @@ func (a *AppRouter) InitRouter(Router *gin.RouterGroup) { appRouter.POST("/installed/params/update", baseApi.UpdateInstalled) appRouter.POST("/installed/update/versions", baseApi.GetUpdateVersions) appRouter.POST("/installed/config/update", baseApi.UpdateAppConfig) - appRouter.POST("/store/update", baseApi.UpdateAppstoreConfig) - appRouter.GET("/store/config", baseApi.GetAppstoreConfig) appRouter.POST("/installed/ignore", baseApi.IgnoreAppUpgrade) appRouter.GET("/ignored/detail", baseApi.ListAppIgnored) diff --git a/core/app/api/v2/setting.go b/core/app/api/v2/setting.go index 14ec03293..45251affb 100644 --- a/core/app/api/v2/setting.go +++ b/core/app/api/v2/setting.go @@ -445,6 +445,42 @@ func (b *BaseApi) UpdateApiConfig(c *gin.Context) { helper.Success(c) } +// @Tags App +// @Summary Update appstore config +// @Accept json +// @Param request body dto.AppstoreUpdate true "request" +// @Success 200 +// @Security ApiKeyAuth +// @Security Timestamp +// @Router /settings/apps/store/update [post] +func (b *BaseApi) UpdateAppstoreConfig(c *gin.Context) { + var req dto.AppstoreUpdate + if err := helper.CheckBindAndValidate(&req, c); err != nil { + return + } + err := settingService.UpdateAppstoreConfig(req) + if err != nil { + helper.InternalServer(c, err) + return + } + helper.Success(c) +} + +// @Tags App +// @Summary Get appstore config +// @Success 200 {object} dto.AppstoreConfig +// @Security ApiKeyAuth +// @Security Timestamp +// @Router /settings/apps/store/config [get] +func (b *BaseApi) GetAppstoreConfig(c *gin.Context) { + res, err := settingService.GetAppstoreConfig() + if err != nil { + helper.InternalServer(c, err) + return + } + helper.SuccessWithData(c, res) +} + func checkEntrancePattern(val string) bool { if len(val) == 0 { return true diff --git a/core/app/dto/setting.go b/core/app/dto/setting.go index 54e76880d..b795816ce 100644 --- a/core/app/dto/setting.go +++ b/core/app/dto/setting.go @@ -1,6 +1,8 @@ package dto -import "time" +import ( + "time" +) type SettingInfo struct { UserName string `json:"userName"` @@ -207,3 +209,13 @@ type TerminalInfo struct { Scrollback string `json:"scrollback"` ScrollSensitivity string `json:"scrollSensitivity"` } + +type AppstoreUpdate struct { + Scope string `json:"scope" validate:"required,oneof=UninstallDeleteImage UpgradeBackup UninstallDeleteBackup"` + Status string `json:"status" validate:"required,oneof=Disable Enable"` +} +type AppstoreConfig struct { + UninstallDeleteImage string `json:"uninstallDeleteImage"` + UpgradeBackup string `json:"upgradeBackup"` + UninstallDeleteBackup string `json:"uninstallDeleteBackup"` +} diff --git a/core/app/service/setting.go b/core/app/service/setting.go index 5062ae2e6..e77b34476 100644 --- a/core/app/service/setting.go +++ b/core/app/service/setting.go @@ -55,6 +55,9 @@ type ISettingService interface { GenerateRSAKey() error GetLoginSetting() (*dto.SystemSetting, error) + + UpdateAppstoreConfig(req dto.AppstoreUpdate) error + GetAppstoreConfig() (*dto.AppstoreConfig, error) } func NewISettingService() ISettingService { @@ -640,6 +643,27 @@ func (u *SettingService) GetLoginSetting() (*dto.SystemSetting, error) { return res, nil } +func (u *SettingService) UpdateAppstoreConfig(req dto.AppstoreUpdate) error { + return settingRepo.UpdateOrCreate(req.Scope, req.Status) +} + +func (u *SettingService) GetAppstoreConfig() (*dto.AppstoreConfig, error) { + res := &dto.AppstoreConfig{} + res.UninstallDeleteImage, _ = settingRepo.GetValueByKey("UninstallDeleteImage") + if res.UninstallDeleteImage == "" { + res.UninstallDeleteImage = "False" + } + res.UpgradeBackup, _ = settingRepo.GetValueByKey("UpgradeBackup") + if res.UpgradeBackup == "" { + res.UpgradeBackup = "False" + } + res.UninstallDeleteBackup, _ = settingRepo.GetValueByKey("UninstallDeleteBackup") + if res.UninstallDeleteBackup == "" { + res.UninstallDeleteBackup = "False" + } + return res, nil +} + func loadDockerProxy(req dto.ProxyUpdate) string { if len(req.ProxyType) == 0 || req.ProxyType == "close" || !req.ProxyDocker { return "" diff --git a/core/init/migration/migrate.go b/core/init/migration/migrate.go index f596957d3..5974feb0a 100644 --- a/core/init/migration/migrate.go +++ b/core/init/migration/migrate.go @@ -25,6 +25,7 @@ func Init() { migrations.InitScriptLibrary, migrations.AddOperationNode, migrations.AddScriptVersion, + migrations.AddAppStoreSetting, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/core/init/migration/migrations/init.go b/core/init/migration/migrations/init.go index a7a783f02..35beba530 100644 --- a/core/init/migration/migrations/init.go +++ b/core/init/migration/migrations/init.go @@ -347,3 +347,19 @@ var AddScriptVersion = &gormigrate.Migration{ return nil }, } + +var AddAppStoreSetting = &gormigrate.Migration{ + ID: "20250506-add-appstore-setting", + Migrate: func(tx *gorm.DB) error { + if err := tx.Create(&model.Setting{Key: "UninstallDeleteImage", Value: "Disable"}).Error; err != nil { + return err + } + if err := tx.Create(&model.Setting{Key: "UpgradeBackup", Value: "Enable"}).Error; err != nil { + return err + } + if err := tx.Create(&model.Setting{Key: "UninstallDeleteBackup", Value: "Disable"}).Error; err != nil { + return err + } + return nil + }, +} diff --git a/core/router/ro_setting.go b/core/router/ro_setting.go index 5e97f033d..b640f9e09 100644 --- a/core/router/ro_setting.go +++ b/core/router/ro_setting.go @@ -43,5 +43,8 @@ func (s *SettingRouter) InitRouter(Router *gin.RouterGroup) { settingRouter.POST("/api/config/update", baseApi.UpdateApiConfig) noAuthRouter.POST("/ssl/reload", baseApi.ReloadSSL) + + settingRouter.POST("/apps/store/update", baseApi.UpdateAppstoreConfig) + settingRouter.GET("/apps/store/config", baseApi.GetAppstoreConfig) } } diff --git a/frontend/src/api/modules/app.ts b/frontend/src/api/modules/app.ts index a60b717c1..9d675ea95 100644 --- a/frontend/src/api/modules/app.ts +++ b/frontend/src/api/modules/app.ts @@ -111,14 +111,6 @@ export const updateInstallConfig = (req: App.AppConfigUpdate) => { return http.post(`apps/installed/config/update`, req); }; -export const getAppStoreConfig = () => { - return http.get(`apps/store/config`); -}; - -export const updateAppStoreConfig = (req: App.AppStoreConfigUpdate) => { - return http.post(`apps/store/update`, req); -}; - export const syncCutomAppStore = (req: App.AppStoreSync) => { return http.post(`/custom/app/sync`, req); }; diff --git a/frontend/src/api/modules/setting.ts b/frontend/src/api/modules/setting.ts index 3207eaa09..2e4c9f50d 100644 --- a/frontend/src/api/modules/setting.ts +++ b/frontend/src/api/modules/setting.ts @@ -4,6 +4,7 @@ import { Base64 } from 'js-base64'; import { ResPage, SearchWithPage, DescriptionUpdate, ReqPage } from '../interface'; import { Setting } from '../interface/setting'; import { TimeoutEnum } from '@/enums/http-enum'; +import { App } from '../interface/app'; // license export const uploadLicense = (oldLicense: string, params: FormData) => { @@ -121,6 +122,12 @@ export const loadMFA = (param: Setting.MFARequest) => { export const bindMFA = (param: Setting.MFABind) => { return http.post(`/core/settings/mfa/bind`, param); }; +export const getAppStoreConfig = () => { + return http.get(`/core/settings/apps/store/config`); +}; +export const updateAppStoreConfig = (req: App.AppStoreConfigUpdate) => { + return http.post(`/core/settings/apps/store/update`, req); +}; // snapshot export const loadSnapshotInfo = () => { diff --git a/frontend/src/views/app-store/installed/delete/index.vue b/frontend/src/views/app-store/installed/delete/index.vue index dc6016d55..d87c40472 100644 --- a/frontend/src/views/app-store/installed/delete/index.vue +++ b/frontend/src/views/app-store/installed/delete/index.vue @@ -47,7 +47,8 @@ import { FormInstance } from 'element-plus'; import { onBeforeUnmount, ref } from 'vue'; import { App } from '@/api/interface/app'; -import { getAppStoreConfig, installedOp } from '@/api/modules/app'; +import { installedOp } from '@/api/modules/app'; +import { getAppStoreConfig } from '@/api/modules/setting'; import i18n from '@/lang'; import bus from '@/global/bus'; import TaskLog from '@/components/log/task/index.vue'; @@ -83,10 +84,10 @@ const acceptParams = async (app: App.AppInstallDto) => { deleteReq.value = { operate: 'delete', installId: 0, - deleteBackup: config.data.uninstallDeleteBackup === 'True', + deleteBackup: config.data.uninstallDeleteBackup === 'Enable', forceDelete: false, deleteDB: true, - deleteImage: config.data.uninstallDeleteImage === 'True', + deleteImage: config.data.uninstallDeleteImage === 'Enable', taskID: uuidv4(), }; deleteInfo.value = ''; diff --git a/frontend/src/views/app-store/installed/upgrade/index.vue b/frontend/src/views/app-store/installed/upgrade/index.vue index 9355f1c32..63e1547cb 100644 --- a/frontend/src/views/app-store/installed/upgrade/index.vue +++ b/frontend/src/views/app-store/installed/upgrade/index.vue @@ -85,7 +85,8 @@