diff --git a/api/dependecyInjection.go b/api/dependecyInjection.go index 538d1b2..41e5fda 100644 --- a/api/dependecyInjection.go +++ b/api/dependecyInjection.go @@ -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()) + } }