修复数据库对象为nil的情况

This commit is contained in:
2025-09-08 17:00:03 +08:00
parent fead740a0f
commit ca3cf02396

View File

@@ -52,63 +52,55 @@ type Application struct {
// NewApplication 创建并返回一个新的核心应用实例
// 初始化所有核心组件
func NewApplication(cfg *config.Config) *Application {
// 从配置中获取数据库连接字符串
connectionString := cfg.GetDatabaseConnectionString()
// 从配置中获取连接池参数
maxOpenConns := cfg.Database.MaxOpenConns
maxIdleConns := cfg.Database.MaxIdleConns
connMaxLifetime := cfg.Database.ConnMaxLifetime
// 初始化存储组件
store := db.NewStorage(connectionString, maxOpenConns, maxIdleConns, connMaxLifetime)
// 初始化用户仓库
userRepo := repository.NewUserRepo(store.GetDB())
// 初始化操作历史仓库
operationHistoryRepo := repository.NewOperationHistoryRepo(store.GetDB())
// 初始化设备控制仓库
deviceControlRepo := repository.NewDeviceControlRepo(store.GetDB())
// 初始化设备仓库
deviceRepo := repository.NewDeviceRepo(store.GetDB())
// 初始化WebSocket服务
websocketService := service.NewWebSocketService()
// 设置WebSocket超时时间
websocketService.SetDefaultTimeout(cfg.GetWebSocketTimeout())
// 初始化API组件
apiInstance := api.NewAPI(cfg, userRepo, operationHistoryRepo, deviceControlRepo, deviceRepo, websocketService)
// 初始化任务执行器组件(使用5个工作协程)
taskExecutor := task.NewExecutor(5)
return &Application{
Storage: store,
API: apiInstance,
TaskExecutor: taskExecutor,
UserRepo: userRepo,
OperationHistoryRepo: operationHistoryRepo,
DeviceControlRepo: deviceControlRepo,
DeviceRepo: deviceRepo,
WebSocketService: websocketService,
Config: cfg,
logger: logs.NewLogger(),
Config: cfg,
logger: logs.NewLogger(),
}
}
// Start 启动核心应用
// 按正确顺序启动所有核心组件
func (app *Application) Start() error {
// 从配置中获取数据库连接字符串
connectionString := app.Config.GetDatabaseConnectionString()
// 从配置中获取连接池参数
maxOpenConns := app.Config.Database.MaxOpenConns
maxIdleConns := app.Config.Database.MaxIdleConns
connMaxLifetime := app.Config.Database.ConnMaxLifetime
// 初始化存储组件
app.Storage = db.NewStorage(connectionString, maxOpenConns, maxIdleConns, connMaxLifetime)
// 启动存储组件
if err := app.Storage.Connect(); err != nil {
return fmt.Errorf("存储连接失败: %v", err)
}
app.logger.Info("存储连接成功")
// 初始化用户仓库
app.UserRepo = repository.NewUserRepo(app.Storage.GetDB())
// 初始化操作历史仓库
app.OperationHistoryRepo = repository.NewOperationHistoryRepo(app.Storage.GetDB())
// 初始化设备控制仓库
app.DeviceControlRepo = repository.NewDeviceControlRepo(app.Storage.GetDB())
// 初始化设备仓库
app.DeviceRepo = repository.NewDeviceRepo(app.Storage.GetDB())
// 初始化WebSocket服务
app.WebSocketService = service.NewWebSocketService()
// 设置WebSocket超时时间
app.WebSocketService.SetDefaultTimeout(app.Config.GetWebSocketTimeout())
// 初始化API组件
app.API = api.NewAPI(app.Config, app.UserRepo, app.OperationHistoryRepo, app.DeviceControlRepo, app.DeviceRepo, app.WebSocketService)
// 初始化任务执行器组件(使用5个工作协程)
app.TaskExecutor = task.NewExecutor(5)
// 启动API组件
if err := app.API.Start(); err != nil {
return fmt.Errorf("API启动失败: %v", err)