This commit is contained in:
2025-06-18 17:44:49 +08:00
parent b171122a32
commit 0878a4e6de
66 changed files with 2841 additions and 1423 deletions

View File

@@ -6,35 +6,44 @@ import (
"management/internal/erpserver/handler"
"management/internal/erpserver/repository"
"management/internal/erpserver/repository/seed"
"management/internal/erpserver/repository/system"
"management/internal/erpserver/repository/system/audit"
config1 "management/internal/erpserver/repository/system/config"
"management/internal/erpserver/repository/system/department"
"management/internal/erpserver/repository/system/loginlog"
"management/internal/erpserver/repository/system/menu"
"management/internal/erpserver/repository/system/role"
"management/internal/erpserver/repository/system/rolemenu"
"management/internal/erpserver/repository/system/user"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/service/v1/common"
system2 "management/internal/erpserver/service/v1/system"
"management/internal/pkg/cache"
"management/internal/pkg/config"
"management/internal/pkg/mid"
"management/internal/pkg/render"
"management/internal/pkg/session"
"management/internal/pkg/sqldb"
"management/internal/tasks"
"github.com/drhin/logger"
"go.uber.org/zap"
)
func Initialize(conf *config.Config, log *logger.Logger) (http.Handler, func(), error) {
db, cleanup, err := repository.NewDB(conf, log)
db, dbClose, err := sqldb.NewDB(conf, log)
if err != nil {
return nil, nil, err
}
rd, cleanup2, err := cache.ConnectRedis(conf, log)
rd, rdClose, err := cache.ConnectRedis(conf, log)
if err != nil {
cleanup()
dbClose()
return nil, nil, err
}
sm, err := session.NewSCSManager(rd, conf)
if err != nil {
cleanup2()
cleanup()
dbClose()
rdClose()
return nil, nil, err
}
@@ -43,45 +52,55 @@ func Initialize(conf *config.Config, log *logger.Logger) (http.Handler, func(),
// =================================================================================================================
// repo
repo := repository.NewRepository(db, log)
transaction := repository.NewTransaction(repo)
store := repository.NewStore(db)
userRepository := system.NewUserRepository(repo)
roleRepository := system.NewRoleRepository(repo)
menuRepository := system.NewMenuRepository(repo)
roleMenuRepository := system.NewRoleMenuRepository(repo)
departmentRepository := system.NewDepartmentRepository(repo)
configRepository := system.NewConfigRepository(repo)
loginLogRepository := system.NewLoginLogRepository(repo)
auditLogRepository := system.NewAuditLogRepository(repo)
userRepository := user.NewStore(store, log)
roleRepository := role.NewStore(store, log)
menuRepository := menu.NewStore(store, log)
roleMenuRepository := rolemenu.NewStore(store, log)
departmentRepository := department.NewStore(store, log)
configRepository := config1.NewStore(store, log)
loginLogRepository := loginlog.NewStore(store, log)
auditLogRepository := audit.NewStore(store, log)
sd := seed.NewSeed(configRepository, departmentRepository, roleRepository, userRepository, menuRepository)
if err := sd.Run(); err != nil {
cleanup2()
cleanup()
dbClose()
rdClose()
return nil, nil, err
}
// =================================================================================================================
// service
service := v1.NewService(log, transaction, sm, redisCache)
service := v1.NewService(log, sm, redisCache)
loginLogService := system2.NewLoginLogService(service, loginLogRepository)
roleMenuService := system2.NewRoleMenuService(service, roleMenuRepository)
roleService := system2.NewRoleService(service, roleRepository)
userService := system2.NewUserService(service, userRepository, roleService, loginLogService)
menuService := system2.NewMenuService(service, menuRepository, roleService, roleMenuService)
departmentService := system2.NewDepartmentService(service, departmentRepository)
userService := system2.NewUserService(service, userRepository, roleService, departmentService, loginLogService)
menuService := system2.NewMenuService(service, menuRepository, roleService, roleMenuService)
configService := system2.NewConfigService(service, configRepository)
captchaService := common.NewCaptchaService()
auditLogService := system2.NewAuditLogService(service, auditLogRepository)
// =================================================================================================================
// mid
// task
// 初始化审计缓冲器
mid.InitAuditBuffer(auditLogService, log)
opt := tasks.NewRedisClientConnector(rd)
taskDistributor := tasks.NewRedisTaskDistributor(log, opt)
taskProcessor := tasks.NewRedisTaskProcessor(log, opt, auditLogService)
go func() {
log.Info("start task processor")
err := taskProcessor.Start()
if err != nil {
log.Fatal("failed to start task processor", zap.Error(err))
}
}()
// =================================================================================================================
// render
@@ -96,6 +115,7 @@ func Initialize(conf *config.Config, log *logger.Logger) (http.Handler, func(),
Log: log,
Sm: sm,
Render: rdr,
TaskDistributor: taskDistributor,
CaptchaService: captchaService,
UserService: userService,
RoleService: roleService,
@@ -107,7 +127,7 @@ func Initialize(conf *config.Config, log *logger.Logger) (http.Handler, func(),
}
app := handler.WebApp(cfg)
return app, func() {
cleanup2()
cleanup()
taskProcessor.Shutdown() // 复用 redis只需要关闭一个 redis 的关闭就不需要了
dbClose()
}, nil
}