feat: 引入dig服务依赖管理

This commit is contained in:
tbphp
2025-07-06 22:44:41 +08:00
parent a992c28593
commit 3b6468af83
12 changed files with 404 additions and 266 deletions

View File

@@ -11,6 +11,7 @@ import (
"gpt-load/internal/types"
"github.com/gin-gonic/gin"
"go.uber.org/dig"
"gorm.io/gorm"
)
@@ -26,25 +27,30 @@ type Server struct {
CommonHandler *CommonHandler
}
// NewServer creates a new handler instance
func NewServer(
db *gorm.DB,
config types.ConfigManager,
settingsManager *config.SystemSettingsManager,
keyValidatorService *services.KeyValidatorService,
keyManualValidationService *services.KeyManualValidationService,
taskService *services.TaskService,
keyService *services.KeyService,
) *Server {
// NewServerParams defines the dependencies for the NewServer constructor.
type NewServerParams struct {
dig.In
DB *gorm.DB
Config types.ConfigManager
SettingsManager *config.SystemSettingsManager
KeyValidatorService *services.KeyValidatorService
KeyManualValidationService *services.KeyManualValidationService
TaskService *services.TaskService
KeyService *services.KeyService
CommonHandler *CommonHandler
}
// NewServer creates a new handler instance with dependencies injected by dig.
func NewServer(params NewServerParams) *Server {
return &Server{
DB: db,
config: config,
SettingsManager: settingsManager,
KeyValidatorService: keyValidatorService,
KeyManualValidationService: keyManualValidationService,
TaskService: taskService,
KeyService: keyService,
CommonHandler: NewCommonHandler(),
DB: params.DB,
config: params.Config,
SettingsManager: params.SettingsManager,
KeyValidatorService: params.KeyValidatorService,
KeyManualValidationService: params.KeyManualValidationService,
TaskService: params.TaskService,
KeyService: params.KeyService,
CommonHandler: params.CommonHandler,
}
}

View File

@@ -12,9 +12,8 @@ import (
// GetSettings handles the GET /api/settings request.
// It retrieves all system settings, groups them by category, and returns them.
func GetSettings(c *gin.Context) {
settingsManager := config.GetSystemSettingsManager()
currentSettings := settingsManager.GetSettings()
func (s *Server) GetSettings(c *gin.Context) {
currentSettings := s.SettingsManager.GetSettings()
settingsInfo := config.GenerateSettingsMetadata(&currentSettings)
// Group settings by category while preserving order
@@ -42,7 +41,7 @@ func GetSettings(c *gin.Context) {
// UpdateSettings handles the PUT /api/settings request.
// It receives a key-value JSON object and updates system settings.
// After updating, it triggers a configuration reload.
func UpdateSettings(c *gin.Context) {
func (s *Server) UpdateSettings(c *gin.Context) {
var settingsMap map[string]any
if err := c.ShouldBindJSON(&settingsMap); err != nil {
response.Error(c, app_errors.NewAPIError(app_errors.ErrInvalidJSON, err.Error()))
@@ -54,22 +53,20 @@ func UpdateSettings(c *gin.Context) {
return
}
settingsManager := config.GetSystemSettingsManager()
// 更新配置
if err := settingsManager.UpdateSettings(settingsMap); err != nil {
if err := s.SettingsManager.UpdateSettings(settingsMap); err != nil {
response.Error(c, app_errors.NewAPIError(app_errors.ErrDatabase, err.Error()))
return
}
// 重载系统配置
if err := settingsManager.LoadFromDatabase(); err != nil {
if err := s.SettingsManager.LoadFromDatabase(); err != nil {
logrus.Errorf("Failed to reload system settings: %v", err)
response.Error(c, app_errors.NewAPIError(app_errors.ErrInternalServer, "Failed to reload system settings after update"))
return
}
settingsManager.DisplayCurrentSettings()
s.SettingsManager.DisplayCurrentSettings()
logrus.Info("Configuration reloaded successfully via API")
response.Success(c, gin.H{