package providers import ( "github.com/Caknoooo/go-gin-clean-starter/config" authRepo "github.com/Caknoooo/go-gin-clean-starter/modules/auth/repository" "github.com/Caknoooo/go-gin-clean-starter/modules/auth/service" clientController "github.com/Caknoooo/go-gin-clean-starter/modules/client/controller" clientRepo "github.com/Caknoooo/go-gin-clean-starter/modules/client/repository" clientService "github.com/Caknoooo/go-gin-clean-starter/modules/client/service" "github.com/sirupsen/logrus" logsController "github.com/Caknoooo/go-gin-clean-starter/modules/logs/controller" menuController "github.com/Caknoooo/go-gin-clean-starter/modules/menu/controller" menuRepo "github.com/Caknoooo/go-gin-clean-starter/modules/menu/repository" menuService "github.com/Caknoooo/go-gin-clean-starter/modules/menu/service" productController "github.com/Caknoooo/go-gin-clean-starter/modules/product/controller" productRepo "github.com/Caknoooo/go-gin-clean-starter/modules/product/repository" productService "github.com/Caknoooo/go-gin-clean-starter/modules/product/service" roleController "github.com/Caknoooo/go-gin-clean-starter/modules/role/controller" roleRepo "github.com/Caknoooo/go-gin-clean-starter/modules/role/repository" roleService "github.com/Caknoooo/go-gin-clean-starter/modules/role/service" permissionsController "github.com/Caknoooo/go-gin-clean-starter/modules/permissions/controller" permissionsRepo "github.com/Caknoooo/go-gin-clean-starter/modules/permissions/repository" permissionsService "github.com/Caknoooo/go-gin-clean-starter/modules/permissions/service" maintGroupController "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/controller" maintGroupRepo "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/repository" maintGroupRepoRole "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/repository" maintGroupRepoRoleUser "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/repository" maintGroupService "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/service" categoryController "github.com/Caknoooo/go-gin-clean-starter/modules/category/controller" categoryRepo "github.com/Caknoooo/go-gin-clean-starter/modules/category/repository" categoryService "github.com/Caknoooo/go-gin-clean-starter/modules/category/service" "github.com/Caknoooo/go-gin-clean-starter/modules/user/controller" "github.com/Caknoooo/go-gin-clean-starter/modules/user/repository" userService "github.com/Caknoooo/go-gin-clean-starter/modules/user/service" "github.com/Caknoooo/go-gin-clean-starter/pkg/constants" "github.com/samber/do" "gorm.io/gorm" ) func InitDatabase(injector *do.Injector) { do.ProvideNamed(injector, constants.DB, func(i *do.Injector) (*gorm.DB, error) { return config.SetUpDatabaseConnection(), nil }) } func initLogger(injector *do.Injector) { do.ProvideNamed(injector, constants.LOGGER, func(i *do.Injector) (*logrus.Logger, error) { return config.SetupLoggerLogrus(), nil }) } func RegisterDependencies(injector *do.Injector) { InitDatabase(injector) initLogger(injector) // <-- tambahkan ini agar logger ter-register do.ProvideNamed(injector, constants.JWTService, func(i *do.Injector) (service.JWTService, error) { return service.NewJWTService(), nil }) // Initialize db := do.MustInvokeNamed[*gorm.DB](injector, constants.DB) jwtService := do.MustInvokeNamed[service.JWTService](injector, constants.JWTService) // Repository userRepository := repository.NewUserRepository(db) refreshTokenRepository := authRepo.NewRefreshTokenRepository(db) productRepository := productRepo.NewProductRepository(db) menuRepository := menuRepo.NewMenuRepository(db) roleRepository := roleRepo.NewRoleRepository(db) clientRepository := clientRepo.NewClientRepository(db) maintenanceGroupRepository := maintGroupRepo.NewMaintGroupRepository(db) maintenanceGroupRoleRepository := maintGroupRepoRole.NewMaintGroupRoleRepository(db) maintenanceGroupRoleUserRepository := maintGroupRepoRoleUser.NewMaintGroupRoleUserRepository(db) permissionsRepository := permissionsRepo.NewPermissionsRepository(db) categoryRepository := categoryRepo.NewCategoryRepository(db) // Service userServ := userService.NewUserService(userRepository, refreshTokenRepository, jwtService, db) productService := productService.NewProductService(productRepository, db) roleService := roleService.NewRoleService(roleRepository, refreshTokenRepository, jwtService, userServ, db) menuSvc := menuService.NewMenuService(menuRepository, jwtService, db) maintenanceGroupServ := maintGroupService.NewMaintenanceGroupService(maintenanceGroupRepository, maintenanceGroupRoleRepository, maintenanceGroupRoleUserRepository, db) clientServ := clientService.NewClientService(clientRepository, db) permissionsServ := permissionsService.NewPermissionsService(permissionsRepository, db) categoryServ := categoryService.NewCategoryService(categoryRepository, db) // Controller do.Provide( injector, func(i *do.Injector) (clientController.ClientController, error) { return clientController.NewClientController(i, clientServ), nil }, ) do.Provide( injector, func(i *do.Injector) (controller.UserController, error) { return controller.NewUserController(i, userServ), nil }, ) do.Provide( injector, func(i *do.Injector) (userService.UserService, error) { return userServ, nil }, ) do.Provide( injector, func(i *do.Injector) (roleController.RoleController, error) { return roleController.NewRoleController(i, roleService), nil }, ) do.Provide( injector, func(i *do.Injector) (menuController.MenuController, error) { return menuController.NewMenuController(i, menuSvc), nil }, ) do.Provide( injector, func(i *do.Injector) (logsController.LogsController, error) { return logsController.NewLogsController(i), nil }, ) do.Provide( injector, func(i *do.Injector) (maintGroupController.MaintenanceGroupController, error) { return maintGroupController.NewMaintenanceGroupController(i, maintenanceGroupServ), nil }, ) do.Provide( injector, func(i *do.Injector) (permissionsController.PermissionsController, error) { return permissionsController.NewPermissionsController(permissionsServ), nil }, ) do.Provide( injector, func(i *do.Injector) (productController.ProductController, error) { return productController.NewProductController(i, productService), nil }, ) do.Provide( injector, func(i *do.Injector) (categoryController.CategoryController, error) { return categoryController.NewCategoryController(i, categoryServ), nil }, ) }