init project

This commit is contained in:
koh
2025-03-02 14:59:34 +07:00
commit e2a219cacd
35 changed files with 2269 additions and 0 deletions

17
internal/wire/injector.go Normal file
View 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
View 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
View 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
}