clean: refactor DI and container initialization

This commit is contained in:
Florian Sylvain
2024-04-26 06:58:43 +02:00
parent 2805425317
commit 33cd947958
+25 -42
View File
@@ -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())
}
}