Files
RenewCMS/api/dependecyInjection.go
T

69 lines
2.2 KiB
Go

package api
import (
"GohCMS2/adapters/secondary/gateways/models"
"GohCMS2/useCases"
"github.com/glebarez/sqlite"
"go.uber.org/dig"
"gorm.io/gorm"
)
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()
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic(err)
}
_ = 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)
}