mirror of
https://github.com/Floriansylvain/RenewCMS.git
synced 2026-08-19 11:43:22 +02:00
clean: refactor DI and container initialization
This commit is contained in:
+25
-42
@@ -10,7 +10,7 @@ import (
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type LocalContainer struct {
|
||||
type UseCases struct {
|
||||
CreatePostUseCase *useCases.CreatePostUseCase
|
||||
GetPostUseCase *useCases.GetPostUseCase
|
||||
ListPostsUseCase *useCases.ListPostsUseCase
|
||||
@@ -20,57 +20,40 @@ type LocalContainer struct {
|
||||
GetPageUseCase *useCases.GetPageUseCase
|
||||
}
|
||||
|
||||
var Container *LocalContainer
|
||||
|
||||
func setContainer(
|
||||
createPost *useCases.CreatePostUseCase,
|
||||
getPost *useCases.GetPostUseCase,
|
||||
listPost *useCases.ListPostsUseCase,
|
||||
getUser *useCases.GetUserUseCase,
|
||||
createUser *useCases.CreateUserUseCase,
|
||||
listUsers *useCases.ListUsersUseCase,
|
||||
getPage *useCases.GetPageUseCase,
|
||||
) *LocalContainer {
|
||||
Container = &LocalContainer{
|
||||
CreatePostUseCase: createPost,
|
||||
GetPostUseCase: getPost,
|
||||
ListPostsUseCase: listPost,
|
||||
GetUserUseCase: getUser,
|
||||
CreateUserUseCase: createUser,
|
||||
ListUsersUseCase: listUsers,
|
||||
GetPageUseCase: getPage,
|
||||
}
|
||||
return Container
|
||||
}
|
||||
|
||||
func InitContainer() {
|
||||
if Container != nil {
|
||||
return
|
||||
}
|
||||
|
||||
digContainer := dig.New()
|
||||
var Container *UseCases
|
||||
|
||||
func getDb() *gorm.DB {
|
||||
dbName := os.Getenv("DB_FILE")
|
||||
if err := os.MkdirAll(filepath.Dir(dbName), os.ModePerm); err != nil {
|
||||
panic("Unable to create necessary subdirectories: " + err.Error())
|
||||
}
|
||||
|
||||
db, err := gorm.Open(sqlite.Open(dbName), &gorm.Config{})
|
||||
if err != nil {
|
||||
panic("Unable to open the database: " + err.Error())
|
||||
}
|
||||
return db
|
||||
}
|
||||
|
||||
_ = db.AutoMigrate(&models.Post{}, &models.User{})
|
||||
func InitContainer() {
|
||||
digContainer := dig.New()
|
||||
|
||||
_ = digContainer.Provide(func() *gorm.DB { return db })
|
||||
database := getDb()
|
||||
_ = database.AutoMigrate(&models.Post{}, &models.User{})
|
||||
_ = digContainer.Provide(func() *gorm.DB { return database })
|
||||
|
||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.CreatePostUseCase { return useCases.NewCreatePostUseCase(db) })
|
||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.GetPostUseCase { return useCases.NewGetPostUseCase(db) })
|
||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.ListPostsUseCase { return useCases.NewListPostsUseCase(db) })
|
||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.GetUserUseCase { return useCases.NewGetUserUseCase(db) })
|
||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.CreateUserUseCase { return useCases.NewCreateUserUseCase(db) })
|
||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.ListUsersUseCase { return useCases.NewListUsersUseCase(db) })
|
||||
_ = digContainer.Provide(useCases.NewGetPageUseCase)
|
||||
|
||||
_ = digContainer.Invoke(setContainer)
|
||||
_ = digContainer.Provide(func(db *gorm.DB) *UseCases {
|
||||
return &UseCases{
|
||||
CreatePostUseCase: useCases.NewCreatePostUseCase(db),
|
||||
GetPostUseCase: useCases.NewGetPostUseCase(db),
|
||||
ListPostsUseCase: useCases.NewListPostsUseCase(db),
|
||||
GetUserUseCase: useCases.NewGetUserUseCase(db),
|
||||
CreateUserUseCase: useCases.NewCreateUserUseCase(db),
|
||||
ListUsersUseCase: useCases.NewListUsersUseCase(db),
|
||||
GetPageUseCase: useCases.NewGetPageUseCase(),
|
||||
}
|
||||
})
|
||||
err := digContainer.Invoke(func(useCases *UseCases) { Container = useCases })
|
||||
if err != nil {
|
||||
panic("Unable to invoke container: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user