// Package wire chứa các định nghĩa cho dependency injection sử dụng Google Wire package wire import ( "github.com/dungnt11/senflow_app/global" "github.com/dungnt11/senflow_app/internal/controllers" "github.com/dungnt11/senflow_app/internal/repositories" "github.com/dungnt11/senflow_app/internal/services" "github.com/gin-gonic/gin" "github.com/google/wire" "gorm.io/gorm" ) // RepositorySet là tập hợp các provider cho repositories var RepositorySet = wire.NewSet( repositories.NewUserRepository, wire.Bind(new(repositories.IUserRepository), new(*repositories.UserRepository)), repositories.NewProductRepository, wire.Bind(new(repositories.IProductRepository), new(*repositories.ProductRepository)), ) // ServiceSet là tập hợp các provider cho services var ServiceSet = wire.NewSet( services.NewUserService, wire.Bind(new(services.IUserService), new(*services.UserService)), services.NewProductService, wire.Bind(new(services.IProductService), new(*services.ProductService)), ) // ControllerSet là tập hợp các provider cho controllers var ControllerSet = wire.NewSet( controllers.NewUserController, wire.Bind(new(controllers.IUserController), new(*controllers.UserController)), controllers.NewProductController, wire.Bind(new(controllers.IProductController), new(*controllers.ProductController)), controllers.NewControllers, ) // AppSet là tập hợp tất cả các provider var AppSet = wire.NewSet( RepositorySet, ServiceSet, ControllerSet, ProvideDB, ) // ProvideDB cung cấp instance của *gorm.DB func ProvideDB() *gorm.DB { return global.Mdb } // ProvideRouter cung cấp instance của *gin.Engine func ProvideRouter() *gin.Engine { if global.Config.Server.AppEnv == "local" { gin.SetMode(gin.DebugMode) gin.ForceConsoleColor() return gin.Default() } else { gin.SetMode(gin.ReleaseMode) return gin.New() } }