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" // 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" 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" 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" "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 RegisterDependencies(injector *do.Injector) { InitDatabase(injector) 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) roleRepository := roleRepo.NewRoleRepository(db) menuRepository := menuRepo.NewMenuRepository(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) // Controller 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) (productController.ProductController, error) { // return productController.NewProductController(i, productService), 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 }, ) }