修改api包
This commit is contained in:
@@ -32,7 +32,6 @@ import (
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/config"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/labstack/echo/v4/middleware"
|
||||
)
|
||||
@@ -40,7 +39,7 @@ import (
|
||||
// API 结构体定义了 HTTP 服务器及其依赖
|
||||
type API struct {
|
||||
echo *echo.Echo // Echo 引擎实例,用于处理 HTTP 请求
|
||||
logger *logs.Logger // 日志记录器,用于输出日志信息
|
||||
Ctx context.Context // API 组件的上下文,包含日志记录器
|
||||
userRepo repository.UserRepository // 用户数据仓库接口,用于用户数据操作
|
||||
tokenService token.Service // Token 服务接口,用于 JWT token 的生成和解析
|
||||
auditService audit.Service // 审计服务,用于记录用户操作
|
||||
@@ -59,7 +58,7 @@ type API struct {
|
||||
// NewAPI 创建并返回一个新的 API 实例
|
||||
// 负责初始化 Echo 引擎、设置全局中间件,并注入所有必要的依赖。
|
||||
func NewAPI(cfg config.ServerConfig,
|
||||
logger *logs.Logger,
|
||||
ctx context.Context,
|
||||
userRepo repository.UserRepository,
|
||||
pigFarmService service.PigFarmService,
|
||||
pigBatchService service.PigBatchService,
|
||||
@@ -82,26 +81,27 @@ func NewAPI(cfg config.ServerConfig,
|
||||
e.Use(middleware.Recover())
|
||||
|
||||
// 初始化 API 结构体
|
||||
baseCtx := context.Background()
|
||||
api := &API{
|
||||
echo: e,
|
||||
logger: logger,
|
||||
Ctx: ctx,
|
||||
userRepo: userRepo,
|
||||
tokenService: tokenService,
|
||||
auditService: auditService,
|
||||
config: cfg,
|
||||
listenHandler: listenHandler,
|
||||
// 在 NewAPI 中初始化用户控制器,并将其作为 API 结构体的成员
|
||||
userController: user.NewController(userService, logger),
|
||||
userController: user.NewController(userService, baseCtx),
|
||||
// 在 NewAPI 中初始化设备控制器,并将其作为 API 结构体的成员
|
||||
deviceController: device.NewController(deviceService, logger),
|
||||
deviceController: device.NewController(deviceService, baseCtx),
|
||||
// 在 NewAPI 中初始化计划控制器,并将其作为 API 结构体的成员
|
||||
planController: plan.NewController(logger, planService),
|
||||
planController: plan.NewController(baseCtx, planService),
|
||||
// 在 NewAPI 中初始化猪场管理控制器
|
||||
pigFarmController: management.NewPigFarmController(logger, pigFarmService),
|
||||
pigFarmController: management.NewPigFarmController(baseCtx, pigFarmService),
|
||||
// 在 NewAPI 中初始化猪群控制器
|
||||
pigBatchController: management.NewPigBatchController(logger, pigBatchService),
|
||||
pigBatchController: management.NewPigBatchController(baseCtx, pigBatchService),
|
||||
// 在 NewAPI 中初始化数据监控控制器
|
||||
monitorController: monitor.NewController(monitorService, logger),
|
||||
monitorController: monitor.NewController(monitorService, baseCtx),
|
||||
}
|
||||
|
||||
api.setupRoutes() // 设置所有路由
|
||||
@@ -112,6 +112,7 @@ func NewAPI(cfg config.ServerConfig,
|
||||
// 接收一个地址字符串 (例如 ":8080"),并在一个新的 goroutine 中启动服务器,
|
||||
// 以便主线程可以继续执行其他任务(例如监听操作系统信号)。
|
||||
func (a *API) Start() {
|
||||
logger := logs.TraceLogger(a.Ctx, a.Ctx, "Start")
|
||||
// 构建监听地址字符串
|
||||
addr := fmt.Sprintf(":%d", a.config.Port)
|
||||
|
||||
@@ -126,18 +127,19 @@ func (a *API) Start() {
|
||||
go func() {
|
||||
// 启动服务器,并检查错误。http.ErrServerClosed 是正常关闭时的错误,无需处理。
|
||||
if err := a.httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
a.logger.Fatalf("HTTP 服务器监听失败: %s", err)
|
||||
logger.Fatalf("HTTP 服务器监听失败: %s", err)
|
||||
}
|
||||
}()
|
||||
// 记录服务器已启动的信息
|
||||
a.logger.Infof("HTTP 服务器正在监听 %s", addr)
|
||||
logger.Infof("HTTP 服务器正在监听 %s", addr)
|
||||
}
|
||||
|
||||
// Stop 优雅地停止 HTTP 服务器
|
||||
// 在停止服务器时,会给一个超时时间,确保正在处理的请求能够完成。
|
||||
func (a *API) Stop() {
|
||||
logger := logs.TraceLogger(a.Ctx, a.Ctx, "Stop")
|
||||
// 记录服务器正在关闭的信息
|
||||
a.logger.Info("正在关闭 HTTP 服务器...")
|
||||
logger.Info("正在关闭 HTTP 服务器...")
|
||||
|
||||
// 创建一个带有 5 秒超时时间的上下文
|
||||
// 在此时间内,服务器会尝试完成所有活跃的连接。
|
||||
@@ -148,8 +150,8 @@ func (a *API) Stop() {
|
||||
// 如果在超时时间内未能关闭,Shutdown 会返回错误。
|
||||
if err := a.httpServer.Shutdown(ctx); err != nil {
|
||||
// 如果关闭失败,记录致命错误并退出
|
||||
a.logger.Fatalf("HTTP 服务器关闭失败: %s", err)
|
||||
logger.Fatalf("HTTP 服务器关闭失败: %s", err)
|
||||
}
|
||||
// 记录服务器已停止的信息
|
||||
a.logger.Info("HTTP 服务器已停止。")
|
||||
logger.Info("HTTP 服务器已停止。")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user