refac: runtime settings are read once at startup and passed in through the composition root; no handler, router or repository reads environment variables

This commit is contained in:
fsylvain committed 2026-09-24 01:30:00 +02:00
1 parent e474f03d91
commit 0b4e614ec9
15 files changed
+722 -66

No files matched your search

+11 -11
View File
@@ -5,6 +5,7 @@ import (
domainImage "RenewCMS/internal/domain/image"
domainMail "RenewCMS/internal/domain/mail"
domainUser "RenewCMS/internal/domain/user"
"RenewCMS/internal/infrastructure/config"
"RenewCMS/internal/infrastructure/hashing"
"RenewCMS/internal/infrastructure/mailer"
"RenewCMS/internal/infrastructure/persistence/models"
@@ -43,8 +44,7 @@ type Repositories struct {
MailRepo domainMail.Repository
}
func getDb() *gorm.DB {
dbName := os.Getenv("DB_FILE")
func getDb(dbName string) *gorm.DB {
if err := os.MkdirAll(filepath.Dir(dbName), os.ModePerm); err != nil {
panic("Unable to create necessary subdirectories: " + err.Error())
}
@@ -60,20 +60,20 @@ func getDb() *gorm.DB {
return db
}
func getRepositories(db *gorm.DB) *Repositories {
func getRepositories(db *gorm.DB, settings config.Settings) *Repositories {
return &Repositories{
ArticleRepo: persistence.NewArticleRepository(db),
UserRepo: persistence.NewUserRepository(db),
ImageRepo: persistence.NewImageRepository(db),
MailRepo: mailer.NewMailRepository(),
ImageRepo: persistence.NewImageRepository(db, settings.UploadDir),
MailRepo: mailer.NewMailRepository(settings.Smtp),
}
}
func getUseCases(repos *Repositories) *UseCases {
func getUseCases(repos *Repositories, settings config.Settings) *UseCases {
hasher := hashing.NewBcryptHasher()
return &UseCases{
Token: jwtauth.New("HS256", []byte(os.Getenv("JWT_SECRET")), nil),
Token: jwtauth.New("HS256", []byte(settings.JWTSecret), nil),
CreateArticleUseCase: useCases.NewCreateArticleUseCase(repos.ArticleRepo),
GetArticleUseCase: useCases.NewGetArticleUseCase(repos.ArticleRepo),
ListArticlesUseCase: useCases.NewListArticlesUseCase(repos.ArticleRepo),
@@ -91,10 +91,10 @@ func getUseCases(repos *Repositories) *UseCases {
}
}
func InitContainer() (*UseCases, func() error) {
db := getDb()
repos := getRepositories(db)
return getUseCases(repos), closeDb(db)
func InitContainer(settings config.Settings) (*UseCases, func() error) {
db := getDb(settings.DBFile)
repos := getRepositories(db, settings)
return getUseCases(repos, settings), closeDb(db)
}
func closeDb(db *gorm.DB) func() error {