mirror of
https://github.com/Floriansylvain/RenewCMS.git
synced 2026-08-19 19:53:21 +02:00
clean: refactor DI and container initialization
This commit is contained in:
+25
-42
@@ -10,7 +10,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LocalContainer struct {
|
type UseCases struct {
|
||||||
CreatePostUseCase *useCases.CreatePostUseCase
|
CreatePostUseCase *useCases.CreatePostUseCase
|
||||||
GetPostUseCase *useCases.GetPostUseCase
|
GetPostUseCase *useCases.GetPostUseCase
|
||||||
ListPostsUseCase *useCases.ListPostsUseCase
|
ListPostsUseCase *useCases.ListPostsUseCase
|
||||||
@@ -20,57 +20,40 @@ type LocalContainer struct {
|
|||||||
GetPageUseCase *useCases.GetPageUseCase
|
GetPageUseCase *useCases.GetPageUseCase
|
||||||
}
|
}
|
||||||
|
|
||||||
var Container *LocalContainer
|
var Container *UseCases
|
||||||
|
|
||||||
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()
|
|
||||||
|
|
||||||
|
func getDb() *gorm.DB {
|
||||||
dbName := os.Getenv("DB_FILE")
|
dbName := os.Getenv("DB_FILE")
|
||||||
if err := os.MkdirAll(filepath.Dir(dbName), os.ModePerm); err != nil {
|
if err := os.MkdirAll(filepath.Dir(dbName), os.ModePerm); err != nil {
|
||||||
panic("Unable to create necessary subdirectories: " + err.Error())
|
panic("Unable to create necessary subdirectories: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
db, err := gorm.Open(sqlite.Open(dbName), &gorm.Config{})
|
db, err := gorm.Open(sqlite.Open(dbName), &gorm.Config{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic("Unable to open the database: " + err.Error())
|
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 {
|
||||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.GetPostUseCase { return useCases.NewGetPostUseCase(db) })
|
return &UseCases{
|
||||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.ListPostsUseCase { return useCases.NewListPostsUseCase(db) })
|
CreatePostUseCase: useCases.NewCreatePostUseCase(db),
|
||||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.GetUserUseCase { return useCases.NewGetUserUseCase(db) })
|
GetPostUseCase: useCases.NewGetPostUseCase(db),
|
||||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.CreateUserUseCase { return useCases.NewCreateUserUseCase(db) })
|
ListPostsUseCase: useCases.NewListPostsUseCase(db),
|
||||||
_ = digContainer.Provide(func(db *gorm.DB) *useCases.ListUsersUseCase { return useCases.NewListUsersUseCase(db) })
|
GetUserUseCase: useCases.NewGetUserUseCase(db),
|
||||||
_ = digContainer.Provide(useCases.NewGetPageUseCase)
|
CreateUserUseCase: useCases.NewCreateUserUseCase(db),
|
||||||
|
ListUsersUseCase: useCases.NewListUsersUseCase(db),
|
||||||
_ = digContainer.Invoke(setContainer)
|
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