fix: preserve OA configuration during database startup

This commit is contained in:
Yvan
2026-11-07 00:57:07 +08:00
parent 9caf5b1abc
commit c2f3ebdf4a
3 changed files with 35 additions and 2 deletions
+27
View File
@@ -0,0 +1,27 @@
package data
import (
"io"
"kra/internal/config"
"kra/internal/integration/storage"
"log/slog"
"path/filepath"
"testing"
)
func TestDatabaseStartupPreservesBusinessOAConfiguration(t *testing.T) {
runtime := config.NewStore(&config.Config{BusinessOA: &config.BusinessOA{URL: "http://oa.test", Key: "test-only-key"}, Data: &config.Data{Database: &config.Database{Driver: "sqlite", Source: filepath.Join(t.TempDir(), "startup.db")}}, Admin: &config.Admin{Local: &config.Local{StorePath: filepath.Join(t.TempDir(), "uploads")}}})
manager, err := storage.NewFileStorage(runtime)
if err != nil {
t.Fatal(err)
}
_, cleanup, err := NewData(runtime, slog.New(slog.NewTextHandler(io.Discard, nil)), manager, testCatalog())
if err != nil {
t.Fatal(err)
}
defer cleanup()
actual := runtime.Snapshot().BusinessOA
if actual == nil || actual.URL != "http://oa.test" || actual.Key != "test-only-key" {
t.Fatal("database startup discarded the OA service configuration")
}
}
+6 -1
View File
@@ -299,7 +299,12 @@ func NewData(runtime *config.Store, appLogger *slog.Logger, storageManager *stor
}
admin.Storage = storageConfig
admin.Email = emailConfig
runtime.Replace(&config.Config{Server: runtime.Server(), Data: c, Admin: admin})
next := runtime.Snapshot()
if next == nil {
next = &config.Config{}
}
next.Data, next.Admin = c, admin
runtime.Replace(next)
if err = d.loadIntegrationRuntime(db); err != nil {
return nil, nil, fmt.Errorf("load integration runtime: %w", err)
}
+2 -1
View File
@@ -195,7 +195,8 @@ func (d *Data) InitializeDatabase(ctx context.Context, input *system.DatabaseCon
currentAdmin.JWT.SigningKey = signingKey
currentAdmin.Storage = storageConfig
currentAdmin.Email = emailConfig
d.runtime.Replace(&configpkg.Config{Server: current.Server, Data: currentData, Admin: currentAdmin})
current.Data, current.Admin = currentData, currentAdmin
d.runtime.Replace(current)
if d.integrations != nil {
d.integrations.Replace(integrationConfigs)
}