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" "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())
}
} }