init project
This commit is contained in:
17
internal/wire/injector.go
Normal file
17
internal/wire/injector.go
Normal file
@@ -0,0 +1,17 @@
|
||||
//go:build wireinject
|
||||
// +build wireinject
|
||||
|
||||
package wire
|
||||
|
||||
import (
|
||||
"github.com/dungnt11/senflow_app/internal/controllers"
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
// InitializeControllers khởi tạo tất cả các controllers
|
||||
func InitializeControllers() (*controllers.Controllers, error) {
|
||||
wire.Build(
|
||||
AppSet,
|
||||
)
|
||||
return nil, nil
|
||||
}
|
62
internal/wire/wire.go
Normal file
62
internal/wire/wire.go
Normal file
@@ -0,0 +1,62 @@
|
||||
// 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()
|
||||
}
|
||||
}
|
28
internal/wire/wire_gen.go
Normal file
28
internal/wire/wire_gen.go
Normal file
@@ -0,0 +1,28 @@
|
||||
// Code generated by Wire. DO NOT EDIT.
|
||||
|
||||
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
|
||||
//go:build !wireinject
|
||||
// +build !wireinject
|
||||
|
||||
package wire
|
||||
|
||||
import (
|
||||
"github.com/dungnt11/senflow_app/internal/controllers"
|
||||
"github.com/dungnt11/senflow_app/internal/repositories"
|
||||
"github.com/dungnt11/senflow_app/internal/services"
|
||||
)
|
||||
|
||||
// Injectors from injector.go:
|
||||
|
||||
// InitializeControllers khởi tạo tất cả các controllers
|
||||
func InitializeControllers() (*controllers.Controllers, error) {
|
||||
db := ProvideDB()
|
||||
userRepository := repositories.NewUserRepository(db)
|
||||
userService := services.NewUserService(userRepository)
|
||||
userController := controllers.NewUserController(userService)
|
||||
productRepository := repositories.NewProductRepository(db)
|
||||
productService := services.NewProductService(productRepository)
|
||||
productController := controllers.NewProductController(productService)
|
||||
controllersControllers := controllers.NewControllers(userController, productController)
|
||||
return controllersControllers, nil
|
||||
}
|
Reference in New Issue
Block a user