优化结构

This commit is contained in:
Yvan
2026-08-24 13:25:16 +08:00
parent 7a9a738c6a
commit 0b6b8ddf1a
72 changed files with 2475 additions and 1443 deletions
+6 -4
View File
@@ -6,7 +6,7 @@ import (
"strings"
"testing"
"kra/internal/conf"
"kra/internal/config"
)
func newPolicyTestData(t *testing.T) *Data {
@@ -20,9 +20,11 @@ func newPolicyTestData(t *testing.T) *Data {
}
data := &Data{
gormDB: newReloadableDB(db, nil),
runtime: conf.NewRuntime(
&conf.Data{Database: &conf.Data_Database{Driver: "sqlite"}},
&conf.AdminBackend{System: &conf.AdminBackend_System{UseStrictAuth: true}},
runtime: config.NewStore(
&config.Config{
Data: &config.Data{Database: &config.Database{Driver: "sqlite"}},
Admin: &config.Admin{System: &config.System{UseStrictAuth: true}},
},
),
}
t.Cleanup(func() { data.gormDB.close() })
+2 -2
View File
@@ -6,7 +6,7 @@ import (
"kra/internal/biz/system"
"testing"
"kra/internal/conf"
"kra/internal/config"
"gorm.io/gorm"
)
@@ -15,7 +15,7 @@ func authorityUintPointer(value uint) *uint { return &value }
func enableStrictAuthorityTestMode(data *Data) {
currentData, _ := data.runtime.Values()
data.runtime.Replace(currentData, &conf.AdminBackend{System: &conf.AdminBackend_System{UseStrictAuth: true}})
data.runtime.Replace(&config.Config{Data: currentData, Admin: &config.Admin{System: &config.System{UseStrictAuth: true}}})
}
func TestCopyAuthorityStrictPolicyValidationMatchesAdministrationContract(t *testing.T) {
+3 -3
View File
@@ -8,7 +8,7 @@ import (
"path/filepath"
"testing"
"kra/internal/conf"
"kra/internal/config"
)
func TestLogViewerReadsNestedCategoryFiles(t *testing.T) {
@@ -22,7 +22,7 @@ func TestLogViewerReadsNestedCategoryFiles(t *testing.T) {
t.Fatal(err)
}
runtime := conf.NewRuntime(nil, &conf.AdminBackend{Zap: &conf.AdminBackend_Zap{Director: root}})
runtime := config.NewStore(&config.Config{Admin: &config.Admin{Zap: &config.Zap{Director: root}}})
repo := &logFileRepo{data: &Data{runtime: runtime}}
files, err := repo.LogFiles(context.Background(), date)
if err != nil {
@@ -41,7 +41,7 @@ func TestLogViewerReadsNestedCategoryFiles(t *testing.T) {
}
func TestLogViewerRejectsPathTraversal(t *testing.T) {
runtime := conf.NewRuntime(nil, &conf.AdminBackend{Zap: &conf.AdminBackend_Zap{Director: t.TempDir()}})
runtime := config.NewStore(&config.Config{Admin: &config.Admin{Zap: &config.Zap{Director: t.TempDir()}}})
repo := &logFileRepo{data: &Data{runtime: runtime}}
_, err := repo.LogContent(context.Background(), "2026-08-16", "../application.log", nil)
if !errors.Is(err, system.ErrInvalidLogPath) {
+2 -2
View File
@@ -6,7 +6,7 @@ import (
"testing"
"time"
"kra/internal/conf"
"kra/internal/config"
)
func newMenuTestData(t *testing.T) *Data {
@@ -20,7 +20,7 @@ func newMenuTestData(t *testing.T) *Data {
}
data := &Data{
gormDB: newReloadableDB(db, nil),
runtime: conf.NewRuntime(&conf.Data{Database: &conf.Data_Database{Driver: "sqlite"}}, &conf.AdminBackend{}),
runtime: config.NewStore(&config.Config{Data: &config.Data{Database: &config.Database{Driver: "sqlite"}}, Admin: &config.Admin{}}),
}
t.Cleanup(func() { data.gormDB.close() })
return data
+4 -4
View File
@@ -5,7 +5,7 @@ import (
"kra/internal/biz/system"
"testing"
"kra/internal/conf"
"kra/internal/config"
)
func TestPermissionSelectedButtonsEmptyShape(t *testing.T) {
@@ -16,7 +16,7 @@ func TestPermissionSelectedButtonsEmptyShape(t *testing.T) {
if err := db.AutoMigrate(&authorityButtonPO{}); err != nil {
t.Fatal(err)
}
data := &Data{gormDB: newReloadableDB(db, nil), runtime: conf.NewRuntime(&conf.Data{Database: &conf.Data_Database{Driver: "sqlite"}}, &conf.AdminBackend{})}
data := &Data{gormDB: newReloadableDB(db, nil), runtime: config.NewStore(&config.Config{Data: &config.Data{Database: &config.Database{Driver: "sqlite"}}, Admin: &config.Admin{}})}
t.Cleanup(func() { data.gormDB.close() })
ids, err := (&permissionRepo{data: data}).SelectedButtons(context.Background(), 1, 2)
@@ -36,7 +36,7 @@ func TestPermissionCanRemoveButtonUsesRawQueryID(t *testing.T) {
if err := db.AutoMigrate(&authorityButtonPO{}); err != nil {
t.Fatal(err)
}
data := &Data{gormDB: newReloadableDB(db, nil), runtime: conf.NewRuntime(&conf.Data{Database: &conf.Data_Database{Driver: "sqlite"}}, &conf.AdminBackend{})}
data := &Data{gormDB: newReloadableDB(db, nil), runtime: config.NewStore(&config.Config{Data: &config.Data{Database: &config.Database{Driver: "sqlite"}}, Admin: &config.Admin{}})}
t.Cleanup(func() { data.gormDB.close() })
repo := &permissionRepo{data: data}
if err := data.gormDB.WithContext(context.Background()).Create(&authorityButtonPO{AuthorityID: 888, MenuID: 10, ButtonID: 31}).Error; err != nil {
@@ -67,7 +67,7 @@ func TestPermissionSetSelectedButtonsPreservesDuplicates(t *testing.T) {
if err := db.AutoMigrate(&authorityButtonPO{}); err != nil {
t.Fatal(err)
}
data := &Data{gormDB: newReloadableDB(db, nil), runtime: conf.NewRuntime(&conf.Data{Database: &conf.Data_Database{Driver: "sqlite"}}, &conf.AdminBackend{})}
data := &Data{gormDB: newReloadableDB(db, nil), runtime: config.NewStore(&config.Config{Data: &config.Data{Database: &config.Database{Driver: "sqlite"}}, Admin: &config.Admin{}})}
t.Cleanup(func() { data.gormDB.close() })
repo := &permissionRepo{data: data}
+2 -2
View File
@@ -1,7 +1,7 @@
package system
import (
"kra/internal/conf"
"kra/internal/config"
"gorm.io/gorm"
)
@@ -12,5 +12,5 @@ type Provider interface {
DB() *gorm.DB
Database(name string) (*gorm.DB, error)
DatabaseReady() bool
Runtime() *conf.Runtime
Runtime() *config.Store
}
+17 -17
View File
@@ -7,15 +7,15 @@ import (
"kra/internal/biz/system"
"time"
"kra/internal/conf"
"kra/internal/config"
"kra/internal/security"
jwt "github.com/golang-jwt/jwt/v5"
)
type runtimeSettings struct{ runtime *conf.Runtime }
type runtimeSettings struct{ runtime *config.Store }
func NewRuntimeSettings(runtime *conf.Runtime) system.RuntimeSettings {
func NewRuntimeSettings(runtime *config.Store) system.RuntimeSettings {
return &runtimeSettings{runtime: runtime}
}
@@ -30,18 +30,18 @@ func (s *runtimeSettings) RouterPrefix() string {
func (s *runtimeSettings) JWTSettings() system.JWTSettings {
value := system.JWTSettings{Issuer: "kra", Expires: 7 * 24 * time.Hour, Buffer: 24 * time.Hour}
config := s.runtime.Admin()
if config == nil || config.Jwt == nil {
if config == nil || config.JWT == nil {
return value
}
value.SigningKey = config.Jwt.SigningKey
if config.Jwt.Issuer != "" {
value.Issuer = config.Jwt.Issuer
value.SigningKey = config.JWT.SigningKey
if config.JWT.Issuer != "" {
value.Issuer = config.JWT.Issuer
}
if config.Jwt.ExpiresTime != nil {
value.Expires = config.Jwt.ExpiresTime.AsDuration()
if config.JWT.ExpiresTime > 0 {
value.Expires = config.JWT.ExpiresTime
}
if config.Jwt.BufferTime != nil {
value.Buffer = config.Jwt.BufferTime.AsDuration()
if config.JWT.BufferTime > 0 {
value.Buffer = config.JWT.BufferTime
}
return value
}
@@ -53,16 +53,16 @@ func (s *runtimeSettings) CaptchaSettings() system.CaptchaSettings {
return value
}
if config.Captcha.KeyLong > 0 {
value.KeyLong = int(config.Captcha.KeyLong)
value.KeyLong = config.Captcha.KeyLong
}
if config.Captcha.ImgWidth > 0 {
value.ImageWidth = int(config.Captcha.ImgWidth)
value.ImageWidth = config.Captcha.ImgWidth
}
if config.Captcha.ImgHeight > 0 {
value.ImageHeight = int(config.Captcha.ImgHeight)
value.ImageHeight = config.Captcha.ImgHeight
}
if config.Captcha.StoreExpiration != nil {
value.StoreExpiration = config.Captcha.StoreExpiration.AsDuration()
if config.Captcha.StoreExpiration > 0 {
value.StoreExpiration = config.Captcha.StoreExpiration
}
return value
}
@@ -72,7 +72,7 @@ func (s *runtimeSettings) MediaSettings() system.MediaSettings {
if config == nil || config.Media == nil {
return system.MediaSettings{}
}
return system.MediaSettings{SessionTTL: int(config.Media.SessionTtl), MaxFileSize: config.Media.MaxFileSize, ChunkDir: config.Media.ChunkDir}
return system.MediaSettings{SessionTTL: config.Media.SessionTTL, MaxFileSize: config.Media.MaxFileSize, ChunkDir: config.Media.ChunkDir}
}
func (s *runtimeSettings) UseMultipoint() bool {
+3 -3
View File
@@ -7,7 +7,7 @@ import (
"github.com/glebarez/sqlite"
"gorm.io/gorm"
"kra/internal/conf"
"kra/internal/config"
)
// Data is a small in-package test harness. Production repositories depend on
@@ -16,7 +16,7 @@ import (
type Data struct {
gormDB *reloadableDB
redis *reloadableRedis
runtime *conf.Runtime
runtime *config.Store
databaseReady atomic.Bool
}
@@ -29,7 +29,7 @@ func (d *Data) DB() *gorm.DB {
func (d *Data) Database(string) (*gorm.DB, error) { return d.DB(), nil }
func (d *Data) DatabaseReady() bool { return d != nil && d.databaseReady.Load() }
func (d *Data) Runtime() *conf.Runtime {
func (d *Data) Runtime() *config.Store {
if d == nil {
return nil
}
+2 -2
View File
@@ -6,7 +6,7 @@ import (
"strings"
"testing"
"kra/internal/conf"
"kra/internal/config"
)
func newTransactionTestData(t *testing.T) *Data {
@@ -19,7 +19,7 @@ func newTransactionTestData(t *testing.T) *Data {
if err = migrateAll(db); err != nil {
t.Fatal(err)
}
data := &Data{gormDB: newReloadableDB(db, nil), redis: newReloadableRedis(nil), runtime: conf.NewRuntime(&conf.Data{Database: &conf.Data_Database{Driver: "sqlite"}}, &conf.AdminBackend{})}
data := &Data{gormDB: newReloadableDB(db, nil), redis: newReloadableRedis(nil), runtime: config.NewStore(&config.Config{Data: &config.Data{Database: &config.Database{Driver: "sqlite"}}, Admin: &config.Admin{}})}
t.Cleanup(func() { data.gormDB.close() })
return data
}