refactor: align framework cleanup with new bootstrap flow

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
2025-11-19 12:47:25 +08:00
parent 39d14ec093
commit d66323487b
67 changed files with 3020 additions and 3992 deletions

View File

@@ -16,13 +16,9 @@ import (
"go.uber.org/zap"
"gorm.io/gorm"
"github.com/break/junhong_cmp_fiber/internal/handler"
"github.com/break/junhong_cmp_fiber/internal/bootstrap"
internalMiddleware "github.com/break/junhong_cmp_fiber/internal/middleware"
"github.com/break/junhong_cmp_fiber/internal/routes"
accountSvc "github.com/break/junhong_cmp_fiber/internal/service/account"
permissionSvc "github.com/break/junhong_cmp_fiber/internal/service/permission"
roleSvc "github.com/break/junhong_cmp_fiber/internal/service/role"
"github.com/break/junhong_cmp_fiber/internal/store/postgres"
"github.com/break/junhong_cmp_fiber/pkg/config"
"github.com/break/junhong_cmp_fiber/pkg/database"
"github.com/break/junhong_cmp_fiber/pkg/logger"
@@ -51,8 +47,15 @@ func main() {
queueClient := initQueue(redisClient, appLogger)
defer closeQueue(queueClient, appLogger)
// 6. 初始化 Services
services := initServices(db, redisClient, appLogger)
// 6. 初始化所有业务组件(通过 Bootstrap
handlers, err := bootstrap.Bootstrap(&bootstrap.Dependencies{
DB: db,
Redis: redisClient,
Logger: appLogger,
})
if err != nil {
appLogger.Fatal("初始化业务组件失败", zap.Error(err))
}
// 7. 启动配置监听器
watchCtx, cancelWatch := context.WithCancel(context.Background())
@@ -66,7 +69,7 @@ func main() {
initMiddleware(app, cfg, appLogger)
// 10. 注册路由
initRoutes(app, cfg, services, queueClient, db, redisClient, appLogger)
initRoutes(app, cfg, handlers, queueClient, db, redisClient, appLogger)
// 11. 启动服务器
startServer(app, cfg, appLogger, cancelWatch)
@@ -131,8 +134,8 @@ func closeDatabase(db *gorm.DB, appLogger *zap.Logger) {
// initRedis 初始化 Redis 连接
func initRedis(cfg *config.Config, appLogger *zap.Logger) *redis.Client {
redisAddr := cfg.Redis.Address + ":" + strconv.Itoa(cfg.Redis.Port)
redisClient := redis.NewClient(&redis.Options{
Addr: redisAddr,
redisClient, err := database.NewRedisClient(database.RedisConfig{
Address: redisAddr,
Password: cfg.Redis.Password,
DB: cfg.Redis.DB,
PoolSize: cfg.Redis.PoolSize,
@@ -140,15 +143,11 @@ func initRedis(cfg *config.Config, appLogger *zap.Logger) *redis.Client {
DialTimeout: cfg.Redis.DialTimeout,
ReadTimeout: cfg.Redis.ReadTimeout,
WriteTimeout: cfg.Redis.WriteTimeout,
})
}, appLogger)
// 测试连接
ctx := context.Background()
if err := redisClient.Ping(ctx).Err(); err != nil {
if err != nil {
appLogger.Fatal("连接 Redis 失败", zap.Error(err))
}
appLogger.Info("Redis 已连接", zap.String("address", redisAddr))
return redisClient
}
@@ -171,32 +170,6 @@ func closeQueue(queueClient *queue.Client, appLogger *zap.Logger) {
}
}
// initServices 初始化所有 Services
func initServices(db *gorm.DB, redisClient *redis.Client, appLogger *zap.Logger) *routes.Services {
// 初始化 RBAC Store 层
accountStore := postgres.NewAccountStore(db, redisClient)
roleStore := postgres.NewRoleStore(db)
permissionStore := postgres.NewPermissionStore(db)
accountRoleStore := postgres.NewAccountRoleStore(db)
rolePermissionStore := postgres.NewRolePermissionStore(db)
// 初始化 RBAC Service 层
accountService := accountSvc.New(accountStore, roleStore, accountRoleStore)
roleService := roleSvc.New(roleStore, permissionStore, rolePermissionStore)
permissionService := permissionSvc.New(permissionStore)
// 初始化 Handler 层
accountHandler := handler.NewAccountHandler(accountService)
roleHandler := handler.NewRoleHandler(roleService)
permissionHandler := handler.NewPermissionHandler(permissionService)
return &routes.Services{
AccountHandler: accountHandler,
RoleHandler: roleHandler,
PermissionHandler: permissionHandler,
}
}
// createFiberApp 创建 Fiber 应用
func createFiberApp(cfg *config.Config, appLogger *zap.Logger) *fiber.App {
return fiber.New(fiber.Config{
@@ -234,9 +207,9 @@ func initMiddleware(app *fiber.App, cfg *config.Config, appLogger *zap.Logger) {
}
// initRoutes 注册路由
func initRoutes(app *fiber.App, cfg *config.Config, services *routes.Services, queueClient *queue.Client, db *gorm.DB, redisClient *redis.Client, appLogger *zap.Logger) {
func initRoutes(app *fiber.App, cfg *config.Config, handlers *bootstrap.Handlers, queueClient *queue.Client, db *gorm.DB, redisClient *redis.Client, appLogger *zap.Logger) {
// 注册模块化路由
routes.RegisterRoutes(app, services)
routes.RegisterRoutes(app, handlers)
// API v1 路由组(用于受保护的端点)
v1 := app.Group("/api/v1")