package build import ( "net/http" "management/internal/erpserver/handler" "management/internal/erpserver/repository" "management/internal/erpserver/repository/seed" "management/internal/erpserver/repository/system" 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" "github.com/drhin/logger" ) func Initialize(conf *config.Config, log *logger.Logger) (http.Handler, func(), error) { db, cleanup, err := repository.NewDB(conf, log) if err != nil { return nil, nil, err } rd, cleanup2, err := cache.ConnectRedis(conf, log) if err != nil { cleanup() return nil, nil, err } sm, err := session.NewSCSManager(rd, conf) if err != nil { cleanup2() cleanup() return nil, nil, err } redisCache := cache.NewRedisCache(rd) // ================================================================================================================= // repo repo := repository.NewRepository(db, log) transaction := repository.NewTransaction(repo) 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) sd := seed.NewSeed(configRepository, departmentRepository, roleRepository, userRepository, menuRepository) if err := sd.Run(); err != nil { cleanup2() cleanup() return nil, nil, err } // ================================================================================================================= // service service := v1.NewService(log, transaction, 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) configService := system2.NewConfigService(service, configRepository) captchaService := common.NewCaptchaService() auditLogService := system2.NewAuditLogService(service, auditLogRepository) // ================================================================================================================= // mid // 初始化审计缓冲器 mid.InitAuditBuffer(auditLogService, log) // ================================================================================================================= // render rdr := render.NewRender(log) // ================================================================================================================= // app route cfg := handler.Config{ Conf: conf, Log: log, Sm: sm, Render: rdr, CaptchaService: captchaService, UserService: userService, RoleService: roleService, DepartmentService: departmentService, MenuService: menuService, ConfigService: configService, AuditLogService: auditLogService, LoginLogService: loginLogService, } app := handler.WebApp(cfg) return app, func() { cleanup2() cleanup() }, nil }