mirror of
https://github.com/Floriansylvain/RenewCMS.git
synced 2026-08-19 11:43:22 +02:00
Changes have been made to support environment specific database file handling. By introducing a new environment variable "DB_FILE", the application's runtime now reads the database file path from the environment. In addition, subdirectories will now be automatically created if they don't exist and more detailed error messages will be printed in case of a failure. Environment variable setup and project building instructions were also updated in the README file.
77 lines
2.5 KiB
Go
77 lines
2.5 KiB
Go
package api
|
|
|
|
import (
|
|
"GohCMS2/adapters/secondary/gateways/models"
|
|
"GohCMS2/useCases"
|
|
"github.com/glebarez/sqlite"
|
|
"go.uber.org/dig"
|
|
"gorm.io/gorm"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type LocalContainer struct {
|
|
CreateArticleUseCase *useCases.CreateArticleUseCase
|
|
GetArticleUseCase *useCases.GetArticleUseCase
|
|
ListArticlesUseCase *useCases.ListArticlesUseCase
|
|
GetUserUseCase *useCases.GetUserUseCase
|
|
CreateUserUseCase *useCases.CreateUserUseCase
|
|
ListUsersUseCase *useCases.ListUsersUseCase
|
|
GetPageUseCase *useCases.GetPageUseCase
|
|
}
|
|
|
|
var Container *LocalContainer
|
|
|
|
func setContainer(
|
|
createArticle *useCases.CreateArticleUseCase,
|
|
getArticle *useCases.GetArticleUseCase,
|
|
listArticle *useCases.ListArticlesUseCase,
|
|
getUser *useCases.GetUserUseCase,
|
|
createUser *useCases.CreateUserUseCase,
|
|
listUsers *useCases.ListUsersUseCase,
|
|
getPage *useCases.GetPageUseCase,
|
|
) *LocalContainer {
|
|
Container = &LocalContainer{
|
|
CreateArticleUseCase: createArticle,
|
|
GetArticleUseCase: getArticle,
|
|
ListArticlesUseCase: listArticle,
|
|
GetUserUseCase: getUser,
|
|
CreateUserUseCase: createUser,
|
|
ListUsersUseCase: listUsers,
|
|
GetPageUseCase: getPage,
|
|
}
|
|
return Container
|
|
}
|
|
|
|
func InitContainer() {
|
|
if Container != nil {
|
|
return
|
|
}
|
|
|
|
digContainer := dig.New()
|
|
|
|
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())
|
|
}
|
|
|
|
_ = db.AutoMigrate(&models.Article{}, &models.User{})
|
|
|
|
_ = digContainer.Provide(func() *gorm.DB { return db })
|
|
|
|
_ = digContainer.Provide(func(db *gorm.DB) *useCases.CreateArticleUseCase { return useCases.NewCreateArticleUseCase(db) })
|
|
_ = digContainer.Provide(func(db *gorm.DB) *useCases.GetArticleUseCase { return useCases.NewGetArticleUseCase(db) })
|
|
_ = digContainer.Provide(func(db *gorm.DB) *useCases.ListArticlesUseCase { return useCases.NewListArticlesUseCase(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)
|
|
}
|