66 lines
2.6 KiB
Go
66 lines
2.6 KiB
Go
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"
|
|
tenantController "github.com/Caknoooo/go-gin-clean-starter/modules/tenant/controller"
|
|
tenantRepo "github.com/Caknoooo/go-gin-clean-starter/modules/tenant/repository"
|
|
tenantService "github.com/Caknoooo/go-gin-clean-starter/modules/tenant/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)
|
|
tenantRepository := tenantRepo.NewTenantRepository(db)
|
|
refreshTokenRepository := authRepo.NewRefreshTokenRepository(db)
|
|
productRepository := productRepo.NewProductRepository(db)
|
|
|
|
// Service
|
|
userService := userService.NewUserService(userRepository, refreshTokenRepository, jwtService, db)
|
|
tenantService := tenantService.NewTenantService(tenantRepository, db)
|
|
productService := productService.NewProductService(productRepository, db)
|
|
|
|
// Controller
|
|
do.Provide(
|
|
injector, func(i *do.Injector) (controller.UserController, error) {
|
|
return controller.NewUserController(i, userService), nil
|
|
},
|
|
)
|
|
do.Provide(
|
|
injector, func(i *do.Injector) (tenantController.TenantController, error) {
|
|
return tenantController.NewTenantController(i, tenantService), nil
|
|
},
|
|
)
|
|
do.Provide(
|
|
injector, func(i *do.Injector) (productController.ProductController, error) {
|
|
return productController.NewProductController(i, productService), nil
|
|
},
|
|
)
|
|
}
|