diff --git a/internal/core/application.go b/internal/core/application.go index aa6282e..8437776 100644 --- a/internal/core/application.go +++ b/internal/core/application.go @@ -1,4 +1,3 @@ -// Package core 提供了应用的核心结构和生命周期管理。 package core import ( @@ -7,9 +6,13 @@ import ( "os/signal" "syscall" + "git.huangwc.com/pig/pig-farm-controller/internal/app/api" + "git.huangwc.com/pig/pig-farm-controller/internal/app/service/token" "git.huangwc.com/pig/pig-farm-controller/internal/infra/config" "git.huangwc.com/pig/pig-farm-controller/internal/infra/database" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" + "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" + "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" "git.huangwc.com/pig/pig-farm-controller/internal/infra/task" ) @@ -19,6 +22,7 @@ type Application struct { Logger *logs.Logger Storage database.Storage Executor *task.Executor + API *api.API // 添加 API 对象 } // NewApplication 创建并初始化一个新的 Application 实例。 @@ -42,12 +46,22 @@ func NewApplication(configPath string) (*Application, error) { // 4. 初始化任务执行器 executor := task.NewExecutor(cfg.Heartbeat.Concurrency, logger) - // 5. 组装 Application 对象 + // 5. 初始化用户仓库 + userRepo := repository.NewGormUserRepository(storage.GetDB()) + + // 6. 初始化 Token 服务 + tokenService := token.NewTokenService([]byte(cfg.App.JWTSecret)) + + // 7. 初始化 API 服务器 + apiServer := api.NewAPI(cfg.Server, logger, userRepo, tokenService) + + // 8. 组装 Application 对象 app := &Application{ Config: cfg, Logger: logger, Storage: storage, Executor: executor, + API: apiServer, } return app, nil @@ -60,6 +74,9 @@ func (app *Application) Start() error { // 启动任务执行器 app.Executor.Start() + // 启动 API 服务器 + app.API.Start() + // 等待关闭信号 quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) @@ -73,6 +90,9 @@ func (app *Application) Start() error { func (app *Application) Stop() error { app.Logger.Info("应用关闭中...") + // 关闭 API 服务器 + app.API.Stop() + // 关闭任务执行器 app.Executor.Stop() @@ -98,7 +118,8 @@ func initStorage(cfg config.DatabaseConfig, logger *logs.Logger) (database.Stora } // 执行数据库迁移 - var dbModels = []interface{}{ /* &User{}, &Product{} */ } + // 这里需要添加所有需要自动迁移的模型 + var dbModels = []interface{}{&models.User{}} if err := storage.Migrate(dbModels...); err != nil { return nil, fmt.Errorf("数据库迁移失败: %w", err) } diff --git a/internal/infra/config/config.go b/internal/infra/config/config.go index e41e877..df19122 100644 --- a/internal/infra/config/config.go +++ b/internal/infra/config/config.go @@ -33,8 +33,9 @@ type Config struct { // AppConfig 代表应用基础配置 type AppConfig struct { - Name string `yaml:"name"` - Version string `yaml:"version"` + Name string `yaml:"name"` + Version string `yaml:"version"` + JWTSecret string `yaml:"jwt_secret"` // JWT 密钥 } // ServerConfig 代表服务器配置