From 5551f8f5aa16f49c8100078aca83b472c444db1e Mon Sep 17 00:00:00 2001 From: Gani Georgiev Date: Sun, 21 May 2023 11:47:05 +0300 Subject: [PATCH] eager update app settings and added isServe check for the auto backups --- core/base_backup.go | 8 +++----- forms/settings_upsert.go | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/core/base_backup.go b/core/base_backup.go index 2fb0b50a..1836d30f 100644 --- a/core/base_backup.go +++ b/core/base_backup.go @@ -251,12 +251,13 @@ func (app *BaseApp) RestoreBackup(ctx context.Context, name string) error { // @todo add tests func (app *BaseApp) initAutobackupHooks() error { c := cron.New() + isServe := false loadJob := func() { c.Stop() rawSchedule := app.Settings().Backups.Cron - if rawSchedule == "" || !app.IsBootstrapped() { + if rawSchedule == "" || !isServe || !app.IsBootstrapped() { return } @@ -321,6 +322,7 @@ func (app *BaseApp) initAutobackupHooks() error { // load on app serve app.OnBeforeServe().Add(func(e *ServeEvent) error { + isServe = true loadJob() return nil }) @@ -333,10 +335,6 @@ func (app *BaseApp) initAutobackupHooks() error { // reload on app settings change app.OnModelAfterUpdate((&models.Param{}).TableName()).Add(func(e *ModelEvent) error { - if !c.HasStarted() { - return nil // no need to reload as it hasn't been started yet - } - p := e.Model.(*models.Param) if p == nil || p.Key != models.ParamAppSettings { return nil diff --git a/forms/settings_upsert.go b/forms/settings_upsert.go index 7ade4583..8ef5fa74 100644 --- a/forms/settings_upsert.go +++ b/forms/settings_upsert.go @@ -58,8 +58,22 @@ func (form *SettingsUpsert) Submit(interceptors ...InterceptorFunc[*settings.Set return runInterceptors(form.Settings, func(s *settings.Settings) error { form.Settings = s + oldSettings, err := form.app.Settings().Clone(); + if err != nil { + return err + } + + // eagerly merge the application settings with the form ones + if err := form.app.Settings().Merge(form.Settings); err != nil { + return err + } + + // persists settings change encryptionKey := os.Getenv(form.app.EncryptionEnv()) if err := form.dao.SaveSettings(form.Settings, encryptionKey); err != nil { + // try to revert app settings + form.app.Settings().Merge(oldSettings) + return err } @@ -73,7 +87,6 @@ func (form *SettingsUpsert) Submit(interceptors ...InterceptorFunc[*settings.Set form.app.LogsDao().Vacuum() } - // merge the application settings with the form ones - return form.app.Settings().Merge(form.Settings) + return nil }, interceptors...) }