mirror of
https://github.com/Floriansylvain/RenewCMS.git
synced 2026-08-19 11:43:22 +02:00
93 lines
3.0 KiB
Go
93 lines
3.0 KiB
Go
package api
|
|
|
|
import (
|
|
"GoCMS/adapters/secondary/gateways"
|
|
"GoCMS/adapters/secondary/gateways/models"
|
|
domainGateways "GoCMS/domain/gateways"
|
|
"GoCMS/useCases"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/glebarez/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type UseCases struct {
|
|
CreatePostUseCase *useCases.CreatePostUseCase
|
|
GetPostUseCase *useCases.GetPostUseCase
|
|
ListPostsUseCase *useCases.ListPostsUseCase
|
|
UpdatePostUseCase *useCases.UpdatePostUseCase
|
|
DeletePostUseCase *useCases.DeletePostUseCase
|
|
GetUserUseCase *useCases.GetUserUseCase
|
|
CreateUserUseCase *useCases.CreateUserUseCase
|
|
UpdateUserUseCase *useCases.UpdateUserUseCase
|
|
DeleteUserUseCase *useCases.DeleteUserUseCase
|
|
ListUsersUseCase *useCases.ListUsersUseCase
|
|
GetPageUseCase *useCases.GetPageUseCase
|
|
SendMailUseCase *useCases.SendMailUseCase
|
|
CreateImageUseCase *useCases.CreateImageUseCase
|
|
DeleteImageUseCase *useCases.DeleteImageUseCase
|
|
}
|
|
|
|
type Repositories struct {
|
|
PostRepo domainGateways.IPostRepository
|
|
UserRepo domainGateways.IUserRepository
|
|
ImageRepo domainGateways.IImageRepository
|
|
MailRepo domainGateways.IMailRepository
|
|
PageRepo domainGateways.IPageRepository
|
|
}
|
|
|
|
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())
|
|
}
|
|
|
|
if err := db.AutoMigrate(&models.Post{}, &models.User{}); err != nil {
|
|
panic("Failed to migrate database: " + err.Error())
|
|
}
|
|
|
|
return db
|
|
}
|
|
|
|
func initRepositories(db *gorm.DB) *Repositories {
|
|
return &Repositories{
|
|
PostRepo: gateways.NewPostRepository(db),
|
|
UserRepo: gateways.NewUserRepository(db),
|
|
ImageRepo: gateways.NewImageRepository(db),
|
|
MailRepo: gateways.NewMailRepository(),
|
|
PageRepo: gateways.NewPageRepository(),
|
|
}
|
|
}
|
|
|
|
func initUseCases(repos *Repositories) *UseCases {
|
|
return &UseCases{
|
|
CreatePostUseCase: useCases.NewCreatePostUseCase(repos.PostRepo),
|
|
GetPostUseCase: useCases.NewGetPostUseCase(repos.PostRepo),
|
|
ListPostsUseCase: useCases.NewListPostsUseCase(repos.PostRepo),
|
|
UpdatePostUseCase: useCases.NewUpdatePostUseCase(repos.PostRepo),
|
|
DeletePostUseCase: useCases.NewDeletePostUseCase(repos.PostRepo),
|
|
GetUserUseCase: useCases.NewGetUserUseCase(repos.UserRepo),
|
|
CreateUserUseCase: useCases.NewCreateUserUseCase(repos.UserRepo),
|
|
UpdateUserUseCase: useCases.NewUpdateUserUseCase(repos.UserRepo),
|
|
DeleteUserUseCase: useCases.NewDeleteUserUseCase(repos.UserRepo),
|
|
ListUsersUseCase: useCases.NewListUsersUseCase(repos.UserRepo),
|
|
GetPageUseCase: useCases.NewGetPageUseCase(repos.PageRepo),
|
|
SendMailUseCase: useCases.NewSendMailUseCase(repos.MailRepo),
|
|
CreateImageUseCase: useCases.NewCreateImageUseCase(repos.ImageRepo),
|
|
DeleteImageUseCase: useCases.NewDeleteImageUseCase(repos.ImageRepo),
|
|
}
|
|
}
|
|
|
|
func InitContainer() {
|
|
db := getDb()
|
|
repos := initRepositories(db)
|
|
Container = initUseCases(repos)
|
|
}
|