优化结构

This commit is contained in:
Yvan
2026-08-28 09:19:54 +08:00
parent 03a4131f6e
commit 279692375b
57 changed files with 778 additions and 799 deletions
+41
View File
@@ -10,3 +10,44 @@ func CloneAdmin(value *Admin) *Admin { return cloneAdmin(value) }
func CloneDatabase(value *Database) *Database { return clonePtr(value) }
func CloneStorage(value *Storage) *Storage { return cloneStorage(value) }
func CloneEmail(value *Email) *Email { return clonePtr(value) }
// MergeRuntimeConfig applies the runtime replacement contract shared by file
// watching and management updates. Omitted top-level sections keep their
// current values, while database-backed storage/email settings are never
// erased merely because they are absent from config.yaml.
func MergeRuntimeConfig(current, next *Config) *Config {
merged := cloneConfig(next)
if merged == nil {
merged = &Config{}
}
if current == nil {
if merged.Admin == nil {
merged.Admin = &Admin{}
}
return merged
}
if merged.Server == nil {
merged.Server = clonePtr(current.Server)
}
if merged.Data == nil {
merged.Data = cloneData(current.Data)
}
if merged.Admin == nil {
merged.Admin = cloneAdmin(current.Admin)
}
if merged.Admin == nil {
merged.Admin = &Admin{}
}
if current.Admin != nil {
if merged.Admin.Storage == nil {
merged.Admin.Storage = cloneStorage(current.Admin.Storage)
}
if merged.Admin.Email == nil {
merged.Admin.Email = clonePtr(current.Admin.Email)
}
if merged.Admin.ConfigPath == "" {
merged.Admin.ConfigPath = current.Admin.ConfigPath
}
}
return merged
}