feat: 引入dig服务依赖管理
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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(¤tSettings)
|
||||
|
||||
// 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{
|
||||
|
Reference in New Issue
Block a user