This commit is contained in:
2026-08-15 23:53:13 +08:00
parent e5b88fcf6c
commit c4b114762b
5 changed files with 288 additions and 12 deletions
+19 -5
View File
@@ -68,7 +68,24 @@ func (r *initializationRepo) IsInitialized(ctx context.Context) (bool, error) {
}
func (r *initializationRepo) Initialize(ctx context.Context, input *biz.DatabaseConfig) error {
config := &conf.Data_Database{Driver: input.Driver, Host: input.Host, Port: input.Port, User: input.User, Password: input.Password, Name: input.Name, Path: input.Path, Config: input.Config}
config := &conf.Data_Database{}
if current := r.data.runtime.Data(); current != nil && current.Database != nil {
config = proto.Clone(current.Database).(*conf.Data_Database)
}
config.Driver = input.Driver
config.Host = input.Host
config.Port = input.Port
config.User = input.User
config.Password = input.Password
config.Name = input.Name
config.Path = input.Path
config.Config = input.Config
config.Source = ""
source, err := databaseDSN(config, "")
if err != nil {
return err
}
config.Source = source
r.data.initMu.Lock()
defer r.data.initMu.Unlock()
initialized, err := r.IsInitialized(ctx)
@@ -197,10 +214,7 @@ func (r *initializationRepo) Initialize(ctx context.Context, input *biz.Database
}); err != nil {
return err
}
currentData, currentAdmin := r.data.runtime.Values()
nextData := proto.Clone(currentData).(*conf.Data)
nextData.Database = config
if err := r.data.persistConfigValues(nextData, currentAdmin); err != nil {
if err := r.data.persistDatabaseConfig(config); err != nil {
return fmt.Errorf("persist database configuration: %w", err)
}
r.data.activateDatabase(candidate, config)