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:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user