137 lines
4.6 KiB
Go
137 lines
4.6 KiB
Go
package build
|
||
|
||
import (
|
||
"net/http"
|
||
|
||
"management/internal/erpserver/handler"
|
||
"management/internal/erpserver/repository"
|
||
"management/internal/erpserver/repository/seed"
|
||
"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/auth"
|
||
"management/internal/erpserver/service/v1/common"
|
||
system2 "management/internal/erpserver/service/v1/system"
|
||
"management/internal/pkg/cache"
|
||
"management/internal/pkg/config"
|
||
"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, dbClose, err := sqldb.NewDB(conf, log)
|
||
if err != nil {
|
||
return nil, nil, err
|
||
}
|
||
|
||
rd, rdClose, err := cache.ConnectRedis(conf, log)
|
||
if err != nil {
|
||
dbClose()
|
||
return nil, nil, err
|
||
}
|
||
|
||
sm, err := session.NewSCSManager(rd, conf)
|
||
if err != nil {
|
||
dbClose()
|
||
rdClose()
|
||
return nil, nil, err
|
||
}
|
||
|
||
redisCache := cache.NewRedisCache(rd)
|
||
|
||
// =================================================================================================================
|
||
// repo
|
||
|
||
store := repository.NewStore(db)
|
||
|
||
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 {
|
||
dbClose()
|
||
rdClose()
|
||
return nil, nil, err
|
||
}
|
||
|
||
// =================================================================================================================
|
||
// service
|
||
|
||
service := v1.NewService(log, sm, redisCache)
|
||
|
||
loginLogService := system2.NewLoginLogService(service, loginLogRepository)
|
||
roleMenuService := system2.NewRoleMenuService(service, roleMenuRepository)
|
||
roleService := system2.NewRoleService(service, roleRepository)
|
||
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)
|
||
authService := auth.NewAuth(log, rd, sm, userService, roleService, loginLogService)
|
||
|
||
// =================================================================================================================
|
||
// task
|
||
|
||
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
|
||
|
||
rdr := render.NewRender(log)
|
||
|
||
// =================================================================================================================
|
||
// app route
|
||
|
||
cfg := handler.Config{
|
||
Conf: conf,
|
||
Log: log,
|
||
Sm: sm,
|
||
Render: rdr,
|
||
TaskDistributor: taskDistributor,
|
||
CaptchaService: captchaService,
|
||
AuthService: authService,
|
||
UserService: userService,
|
||
RoleService: roleService,
|
||
DepartmentService: departmentService,
|
||
MenuService: menuService,
|
||
ConfigService: configService,
|
||
AuditLogService: auditLogService,
|
||
LoginLogService: loginLogService,
|
||
}
|
||
app := handler.WebApp(cfg)
|
||
return app, func() {
|
||
taskProcessor.Shutdown() // 复用 redis,只需要关闭一个 redis 的关闭就不需要了
|
||
dbClose()
|
||
}, nil
|
||
}
|