refac: fixed, better, smarter, correct dependency injection

This commit is contained in:
Florian Sylvain
2025-03-29 00:51:01 +01:00
parent d895477b8c
commit a77a5ad314
35 changed files with 169 additions and 144 deletions
@@ -4,11 +4,12 @@ import (
"GoCMS/domain/gateways" "GoCMS/domain/gateways"
"bytes" "bytes"
"embed" "embed"
"gopkg.in/gomail.v2"
"html/template" "html/template"
"log" "log"
"os" "os"
"strconv" "strconv"
"gopkg.in/gomail.v2"
) )
type MailRepository struct{} type MailRepository struct{}
@@ -16,7 +17,11 @@ type MailRepository struct{}
//go:embed mail/templates/* //go:embed mail/templates/*
var mailTemplateFiles embed.FS var mailTemplateFiles embed.FS
func (m MailRepository) Send(receiverAddress string, templateName string, data interface{}) error { func NewMailRepository() *MailRepository {
return &MailRepository{}
}
func (m MailRepository) Send(receiverAddress string, templateName string, data any) error {
from := os.Getenv("SMTP_EMAIL") from := os.Getenv("SMTP_EMAIL")
password := os.Getenv("SMTP_PASSWORD") password := os.Getenv("SMTP_PASSWORD")
smtpHost := os.Getenv("SMTP_HOST") smtpHost := os.Getenv("SMTP_HOST")
@@ -16,7 +16,7 @@ func NewPageRepository() *PageRepository {
return &PageRepository{} return &PageRepository{}
} }
func (p *PageRepository) Get(name string, data interface{}) ([]byte, error) { func (p *PageRepository) Get(name string, data any) ([]byte, error) {
var processedHTML bytes.Buffer var processedHTML bytes.Buffer
tmpl, err := template.ParseFS(webTemplateFiles, "web/templates/"+name+".html") tmpl, err := template.ParseFS(webTemplateFiles, "web/templates/"+name+".html")
if err != nil { if err != nil {
@@ -7,7 +7,7 @@
<body class="text-dark"> <body class="text-dark">
{{.Navbar}} {{.Navbar}}
<div class="container mt-3 text-black-50"> <div class="container mt-3 text-black-50">
<h1>Accueil</h1> <h1>Home</h1>
<p>Welcome on GoCMS !</p> <p>Welcome on GoCMS !</p>
<a href="/post"> <a href="/post">
<button class="btn btn-outline-primary">Posts &raquo;</button> <button class="btn btn-outline-primary">Posts &raquo;</button>
+4 -4
View File
@@ -34,7 +34,7 @@ const LogsErrorMessage = "Access to the requested resource is forbidden due to i
const BodyErrorMessage = "The request cannot be processed due to a mismatch in the format of the body." const BodyErrorMessage = "The request cannot be processed due to a mismatch in the format of the body."
func SetJwtCookie(w *http.ResponseWriter, userId uint32) error { func SetJwtCookie(w *http.ResponseWriter, userId uint32) error {
_, tokenString, err := Token.Encode(map[string]interface{}{"user_id": userId}) _, tokenString, err := Token.Encode(map[string]any{"user_id": userId})
if err != nil { if err != nil {
return err return err
} }
@@ -138,7 +138,7 @@ func login(w http.ResponseWriter, r *http.Request) {
_ = SetJwtCookie(&w, dbUser.ID) _ = SetJwtCookie(&w, dbUser.ID)
message, _ := json.Marshal(map[string]interface{}{"message": "User logged in! HTTPonly jwt cookie created"}) message, _ := json.Marshal(map[string]any{"message": "User logged in! HTTPonly jwt cookie created"})
_, _ = w.Write(message) _, _ = w.Write(message)
} }
@@ -170,7 +170,7 @@ func register(w http.ResponseWriter, r *http.Request) {
_ = SetJwtCookie(&w, createdUser.ID) _ = SetJwtCookie(&w, createdUser.ID)
message, _ := json.Marshal(map[string]interface{}{"message": "User registered! HTTPonly jwt cookie created"}) message, _ := json.Marshal(map[string]any{"message": "User registered! HTTPonly jwt cookie created"})
_, _ = w.Write(message) _, _ = w.Write(message)
} }
@@ -188,7 +188,7 @@ func RemoveJwtCookie(w http.ResponseWriter) {
func logout(w http.ResponseWriter, _ *http.Request) { func logout(w http.ResponseWriter, _ *http.Request) {
RemoveJwtCookie(w) RemoveJwtCookie(w)
message, _ := json.Marshal(map[string]interface{}{"message": "User logged out! HTTPonly jwt cookie deleted"}) message, _ := json.Marshal(map[string]any{"message": "User logged out! HTTPonly jwt cookie deleted"})
_, _ = w.Write(message) _, _ = w.Write(message)
} }
+1 -1
View File
@@ -33,7 +33,7 @@ func PostImage(w http.ResponseWriter, r *http.Request) {
return return
} }
newJson := map[string]interface{}{"location": newImage.Path} newJson := map[string]any{"location": newImage.Path}
newJsonBytes, _ := json.Marshal(newJson) newJsonBytes, _ := json.Marshal(newJson)
_, _ = w.Write(newJsonBytes) _, _ = w.Write(newJsonBytes)
+1 -1
View File
@@ -8,7 +8,7 @@ import (
func GetHomePage(w http.ResponseWriter, _ *http.Request) { func GetHomePage(w http.ResponseWriter, _ *http.Request) {
navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil) navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil)
homeTmpl, _ := api.Container.GetPageUseCase.GetPage("home", map[string]interface{}{ homeTmpl, _ := api.Container.GetPageUseCase.GetPage("home", map[string]any{
"Navbar": template.HTML(navbarTmpl), "Navbar": template.HTML(navbarTmpl),
"Head": headTmpl, "Head": headTmpl,
}) })
+1 -1
View File
@@ -9,7 +9,7 @@ import (
func GetPageIntegration(w http.ResponseWriter, r *http.Request) { func GetPageIntegration(w http.ResponseWriter, r *http.Request) {
navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil) navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil)
templ, _ := api.Container.GetPageUseCase.GetPage("integration", map[string]interface{}{ templ, _ := api.Container.GetPageUseCase.GetPage("integration", map[string]any{
"Navbar": template.HTML(navbarTmpl), "Navbar": template.HTML(navbarTmpl),
"Head": headTmpl, "Head": headTmpl,
"Host": os.Getenv("HOST"), "Host": os.Getenv("HOST"),
+1 -1
View File
@@ -35,7 +35,7 @@ func GetLoginPageHandler(loginPage *LoginPage) http.HandlerFunc {
} }
success, _ := url.QueryUnescape(r.URL.Query().Get("success")) success, _ := url.QueryUnescape(r.URL.Query().Get("success"))
failure, _ := url.QueryUnescape(r.URL.Query().Get("failure")) failure, _ := url.QueryUnescape(r.URL.Query().Get("failure"))
bs, _ := api.Container.GetPageUseCase.GetPage("login", map[string]interface{}{ bs, _ := api.Container.GetPageUseCase.GetPage("login", map[string]any{
"PageError": loginPage.PageError, "PageError": loginPage.PageError,
"Username": loginPage.Username, "Username": loginPage.Username,
"Head": headTmpl, "Head": headTmpl,
@@ -18,7 +18,7 @@ func GetPasswordResetRequest(w http.ResponseWriter, r *http.Request) {
success := r.URL.Query().Get("success") success := r.URL.Query().Get("success")
email := r.URL.Query().Get("email") email := r.URL.Query().Get("email")
bs, _ := api.Container.GetPageUseCase.GetPage("passwordResetRequest", map[string]interface{}{ bs, _ := api.Container.GetPageUseCase.GetPage("passwordResetRequest", map[string]any{
"Head": headTmpl, "Head": headTmpl,
"Email": email, "Email": email,
"Success": success, "Success": success,
@@ -16,7 +16,7 @@ func GetPasswordResetValidate(w http.ResponseWriter, r *http.Request) {
if failure != "" { if failure != "" {
pageError = NewPageError(failure) pageError = NewPageError(failure)
} }
template, _ := api.Container.GetPageUseCase.GetPage("passwordResetValidate", map[string]interface{}{ template, _ := api.Container.GetPageUseCase.GetPage("passwordResetValidate", map[string]any{
"Head": headTmpl, "Head": headTmpl,
"Error": pageError, "Error": pageError,
"Email": r.URL.Query().Get("email"), "Email": r.URL.Query().Get("email"),
+1 -1
View File
@@ -16,7 +16,7 @@ type PostCreatePageError struct {
func GetPostCreatePageTemplate(postName string, errorMessage string) ([]byte, error) { func GetPostCreatePageTemplate(postName string, errorMessage string) ([]byte, error) {
navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil) navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil)
return api.Container.GetPageUseCase.GetPage("postCreate", map[string]interface{}{ return api.Container.GetPageUseCase.GetPage("postCreate", map[string]any{
"Navbar": template.HTML(navbarTmpl), "Navbar": template.HTML(navbarTmpl),
"Head": headTmpl, "Head": headTmpl,
"PageError": PostCreatePageError{ "PageError": PostCreatePageError{
+1 -1
View File
@@ -18,7 +18,7 @@ type PostEditPageAlert struct {
func getPostEditPageTemplate(post post.Post, alert PostEditPageAlert) []byte { func getPostEditPageTemplate(post post.Post, alert PostEditPageAlert) []byte {
navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil) navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil)
postTmpl, _ := api.Container.GetPageUseCase.GetPage("postEdit", map[string]interface{}{ postTmpl, _ := api.Container.GetPageUseCase.GetPage("postEdit", map[string]any{
"Navbar": template.HTML(navbarTmpl), "Navbar": template.HTML(navbarTmpl),
"Head": headTmpl, "Head": headTmpl,
"Post": post, "Post": post,
+3 -3
View File
@@ -9,9 +9,9 @@ import (
func GetPostsPage(w http.ResponseWriter, _ *http.Request) { func GetPostsPage(w http.ResponseWriter, _ *http.Request) {
posts := api.Container.ListPostsUseCase.ListPosts() posts := api.Container.ListPostsUseCase.ListPosts()
var formattedPosts []map[string]interface{} var formattedPosts []map[string]any
for _, post := range posts { for _, post := range posts {
formattedPosts = append(formattedPosts, map[string]interface{}{ formattedPosts = append(formattedPosts, map[string]any{
"ID": post.ID, "ID": post.ID,
"Title": post.Title, "Title": post.Title,
"IsOnline": post.IsOnline, "IsOnline": post.IsOnline,
@@ -21,7 +21,7 @@ func GetPostsPage(w http.ResponseWriter, _ *http.Request) {
} }
navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil) navbarTmpl, _ := api.Container.GetPageUseCase.GetPage("componentNavbar", nil)
postsTmpl, _ := api.Container.GetPageUseCase.GetPage("posts", map[string]interface{}{ postsTmpl, _ := api.Container.GetPageUseCase.GetPage("posts", map[string]any{
"Navbar": template.HTML(navbarTmpl), "Navbar": template.HTML(navbarTmpl),
"Head": headTmpl, "Head": headTmpl,
"Posts": formattedPosts, "Posts": formattedPosts,
+1 -1
View File
@@ -44,7 +44,7 @@ func GetRegisterPageHandler(registerPage *RegisterPage) http.HandlerFunc {
PostRegisterPage(w, r) PostRegisterPage(w, r)
return return
} }
bs, err := api.Container.GetPageUseCase.GetPage("register", map[string]interface{}{ bs, err := api.Container.GetPageUseCase.GetPage("register", map[string]any{
"PageError": registerPage.PageError, "PageError": registerPage.PageError,
"Username": registerPage.Username, "Username": registerPage.Username,
"Email": registerPage.Email, "Email": registerPage.Email,
+1 -1
View File
@@ -29,7 +29,7 @@ func PostRegisterPendingPage(w http.ResponseWriter, r *http.Request) {
} }
func GetRegisterPendingPage(w http.ResponseWriter, _ *http.Request) { func GetRegisterPendingPage(w http.ResponseWriter, _ *http.Request) {
registerPendingTmpl, _ := api.Container.GetPageUseCase.GetPage("registerPending", map[string]interface{}{ registerPendingTmpl, _ := api.Container.GetPageUseCase.GetPage("registerPending", map[string]any{
"Head": headTmpl, "Head": headTmpl,
}) })
_, _ = w.Write(registerPendingTmpl) _, _ = w.Write(registerPendingTmpl)
+1 -1
View File
@@ -38,7 +38,7 @@ func GetRegisterValidatePage(w http.ResponseWriter, r *http.Request) {
} }
} }
registerValidateTmpl, _ := api.Container.GetPageUseCase.GetPage("registerValidate", map[string]interface{}{ registerValidateTmpl, _ := api.Container.GetPageUseCase.GetPage("registerValidate", map[string]any{
"Head": headTmpl, "Head": headTmpl,
"PageError": NewPageError(errorMessage), "PageError": NewPageError(errorMessage),
}) })
+82 -24
View File
@@ -1,15 +1,42 @@
package api package api
import ( import (
"GoCMS/adapters/secondary/gateways"
"GoCMS/adapters/secondary/gateways/models" "GoCMS/adapters/secondary/gateways/models"
"GoCMS/useCases" "GoCMS/useCases"
"fmt"
"os"
"path/filepath"
"reflect"
"runtime"
"github.com/glebarez/sqlite" "github.com/glebarez/sqlite"
"go.uber.org/dig" "go.uber.org/dig"
"gorm.io/gorm" "gorm.io/gorm"
"os"
"path/filepath"
) )
type UseCaseDefinition struct {
Constructor interface{}
FieldName string
}
var useCaseDefinitions = []UseCaseDefinition{
{useCases.NewCreatePostUseCase, "CreatePostUseCase"},
{useCases.NewGetPostUseCase, "GetPostUseCase"},
{useCases.NewListPostsUseCase, "ListPostsUseCase"},
{useCases.NewUpdatePostUseCase, "UpdatePostUseCase"},
{useCases.NewDeletePostUseCase, "DeletePostUseCase"},
{useCases.NewGetUserUseCase, "GetUserUseCase"},
{useCases.NewCreateUserUseCase, "CreateUserUseCase"},
{useCases.NewUpdateUserUseCase, "UpdateUserUseCase"},
{useCases.NewDeleteUserUseCase, "DeleteUserUseCase"},
{useCases.NewListUsersUseCase, "ListUsersUseCase"},
{useCases.NewGetPageUseCase, "GetPageUseCase"},
{useCases.NewSendMailUseCase, "SendMailUseCase"},
{useCases.NewCreateImageUseCase, "CreateImageUseCase"},
{useCases.NewDeleteImageUseCase, "DeleteImageUseCase"},
}
type UseCases struct { type UseCases struct {
CreatePostUseCase *useCases.CreatePostUseCase CreatePostUseCase *useCases.CreatePostUseCase
GetPostUseCase *useCases.GetPostUseCase GetPostUseCase *useCases.GetPostUseCase
@@ -45,29 +72,60 @@ func InitContainer() {
digContainer := dig.New() digContainer := dig.New()
database := getDb() database := getDb()
_ = database.AutoMigrate(&models.Post{}, &models.User{}) if err := database.AutoMigrate(&models.Post{}, &models.User{}); err != nil {
_ = digContainer.Provide(func() *gorm.DB { return database }) panic("Failed to migrate database: " + err.Error())
_ = digContainer.Provide(func(db *gorm.DB) *UseCases {
return &UseCases{
CreatePostUseCase: useCases.NewCreatePostUseCase(db),
GetPostUseCase: useCases.NewGetPostUseCase(db),
ListPostsUseCase: useCases.NewListPostsUseCase(db),
UpdatePostUseCase: useCases.NewUpdatePostUseCase(db),
DeletePostUseCase: useCases.NewDeletePostUseCase(db),
GetUserUseCase: useCases.NewGetUserUseCase(db),
CreateUserUseCase: useCases.NewCreateUserUseCase(db),
UpdateUserUseCase: useCases.NewUpdateUserUseCase(db),
DeleteUserUseCase: useCases.NewDeleteUserUseCase(db),
ListUsersUseCase: useCases.NewListUsersUseCase(db),
GetPageUseCase: useCases.NewGetPageUseCase(),
SendMailUseCase: useCases.NewSendMailUseCase(),
CreateImageUseCase: useCases.NewCreateImageUseCase(db),
DeleteImageUseCase: useCases.NewDeleteImageUseCase(db),
} }
})
err := digContainer.Invoke(func(useCases *UseCases) { Container = useCases }) if err := digContainer.Provide(func() *gorm.DB { return database }); err != nil {
if err != nil { panic("Failed to provide database: " + err.Error())
}
provideRepositories(digContainer)
for _, def := range useCaseDefinitions {
if err := digContainer.Provide(def.Constructor); err != nil {
funcName := runtime.FuncForPC(reflect.ValueOf(def.Constructor).Pointer()).Name()
panic(fmt.Sprintf("Failed to provide %s: %v", funcName, err))
}
}
if err := digContainer.Provide(func(values ...any) *UseCases {
container := &UseCases{}
containerValue := reflect.ValueOf(container).Elem()
for i, value := range values {
fieldName := useCaseDefinitions[i].FieldName
field := containerValue.FieldByName(fieldName)
if field.IsValid() && field.CanSet() {
field.Set(reflect.ValueOf(value))
} else {
panic(fmt.Sprintf("Failed to set field %s", fieldName))
}
}
return container
}, dig.As(new(*UseCases))); err != nil {
panic("Failed to provide container constructor: " + err.Error())
}
if err := digContainer.Invoke(func(useCases *UseCases) { Container = useCases }); err != nil {
panic("Unable to invoke container: " + err.Error()) panic("Unable to invoke container: " + err.Error())
} }
} }
func provideRepositories(container *dig.Container) {
repositories := []any{
gateways.NewPostRepository,
gateways.NewUserRepository,
gateways.NewImageRepository,
gateways.NewMailRepository,
gateways.NewPageRepository,
}
for _, repo := range repositories {
if err := container.Provide(repo); err != nil {
funcName := runtime.FuncForPC(reflect.ValueOf(repo).Pointer()).Name()
panic(fmt.Sprintf("Failed to provide repository %s: %v", funcName, err))
}
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
package gateways package gateways
type IMailRepository interface { type IMailRepository interface {
Send(receiverAddress string, templateName string, data interface{}) error Send(receiverAddress string, templateName string, data any) error
} }
+1 -1
View File
@@ -1,5 +1,5 @@
package gateways package gateways
type IPageRepository interface { type IPageRepository interface {
Get(name string, data interface{}) ([]byte, error) Get(name string, data any) ([]byte, error)
} }
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -46,7 +46,7 @@ func StartServerIfNotAlready() {
} }
func getAuthorizationCookie(userId uint32) *http.Cookie { func getAuthorizationCookie(userId uint32) *http.Cookie {
_, tokenString, err := auth.Token.Encode(map[string]interface{}{"user_id": userId}) _, tokenString, err := auth.Token.Encode(map[string]any{"user_id": userId})
if err != nil { if err != nil {
panic(err) panic(err)
} }
+4 -7
View File
@@ -1,20 +1,17 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/image" "GoCMS/domain/image"
"gorm.io/gorm"
"mime/multipart" "mime/multipart"
) )
type CreateImageUseCase struct { type CreateImageUseCase struct {
imageRepository gateways.ImageRepository imageRepository gateways.IImageRepository
} }
func NewCreateImageUseCase(db *gorm.DB) *CreateImageUseCase { func NewCreateImageUseCase(imageRepository gateways.IImageRepository) *CreateImageUseCase {
return &CreateImageUseCase{ return &CreateImageUseCase{imageRepository}
imageRepository: *gateways.NewImageRepository(db),
}
} }
func (g *CreateImageUseCase) CreateImage(file multipart.File, fileHeader multipart.FileHeader) (image.Image, error) { func (g *CreateImageUseCase) CreateImage(file multipart.File, fileHeader multipart.FileHeader) (image.Image, error) {
+4 -7
View File
@@ -1,13 +1,12 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/post" "GoCMS/domain/post"
"gorm.io/gorm"
) )
type CreatePostUseCase struct { type CreatePostUseCase struct {
postRepository gateways.PostRepository postRepository gateways.IPostRepository
} }
type CreatePostCommand struct { type CreatePostCommand struct {
@@ -15,10 +14,8 @@ type CreatePostCommand struct {
Body string Body string
} }
func NewCreatePostUseCase(db *gorm.DB) *CreatePostUseCase { func NewCreatePostUseCase(postRepository gateways.IPostRepository) *CreatePostUseCase {
return &CreatePostUseCase{ return &CreatePostUseCase{postRepository}
postRepository: *gateways.NewPostRepository(db),
}
} }
func (g *CreatePostUseCase) CreatePost(createPost CreatePostCommand) (post.Post, error) { func (g *CreatePostUseCase) CreatePost(createPost CreatePostCommand) (post.Post, error) {
+4 -7
View File
@@ -1,13 +1,12 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/user" "GoCMS/domain/user"
"gorm.io/gorm"
) )
type CreateUserUseCase struct { type CreateUserUseCase struct {
userRepository gateways.UserRepository userRepository gateways.IUserRepository
} }
type CreateUserCommand struct { type CreateUserCommand struct {
@@ -17,10 +16,8 @@ type CreateUserCommand struct {
VerificationCode string VerificationCode string
} }
func NewCreateUserUseCase(db *gorm.DB) *CreateUserUseCase { func NewCreateUserUseCase(userRepository gateways.IUserRepository) *CreateUserUseCase {
return &CreateUserUseCase{ return &CreateUserUseCase{userRepository}
userRepository: *gateways.NewUserRepository(db),
}
} }
func (g *CreateUserUseCase) CreateUser(createUser CreateUserCommand) (user.User, error) { func (g *CreateUserUseCase) CreateUser(createUser CreateUserCommand) (user.User, error) {
+4 -7
View File
@@ -1,18 +1,15 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"gorm.io/gorm"
) )
type DeleteImageUseCase struct { type DeleteImageUseCase struct {
imageRepository gateways.ImageRepository imageRepository gateways.IImageRepository
} }
func NewDeleteImageUseCase(db *gorm.DB) *DeleteImageUseCase { func NewDeleteImageUseCase(imageRepository gateways.IImageRepository) *DeleteImageUseCase {
return &DeleteImageUseCase{ return &DeleteImageUseCase{imageRepository}
imageRepository: *gateways.NewImageRepository(db),
}
} }
func (g *DeleteImageUseCase) DeleteImage(imageId uint32) error { func (g *DeleteImageUseCase) DeleteImage(imageId uint32) error {
+4 -7
View File
@@ -1,18 +1,15 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"gorm.io/gorm"
) )
type DeletePostUseCase struct { type DeletePostUseCase struct {
postRepository gateways.PostRepository postRepository gateways.IPostRepository
} }
func NewDeletePostUseCase(db *gorm.DB) *DeletePostUseCase { func NewDeletePostUseCase(postRepository gateways.IPostRepository) *DeletePostUseCase {
return &DeletePostUseCase{ return &DeletePostUseCase{postRepository}
postRepository: *gateways.NewPostRepository(db),
}
} }
func (g *DeletePostUseCase) DeletePost(userId uint32) error { func (g *DeletePostUseCase) DeletePost(userId uint32) error {
+4 -7
View File
@@ -1,18 +1,15 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"gorm.io/gorm"
) )
type DeleteUserUseCase struct { type DeleteUserUseCase struct {
userRepository gateways.UserRepository userRepository gateways.IUserRepository
} }
func NewDeleteUserUseCase(db *gorm.DB) *DeleteUserUseCase { func NewDeleteUserUseCase(userRepository gateways.IUserRepository) *DeleteUserUseCase {
return &DeleteUserUseCase{ return &DeleteUserUseCase{userRepository}
userRepository: *gateways.NewUserRepository(db),
}
} }
func (g *DeleteUserUseCase) DeleteUser(userId uint32) error { func (g *DeleteUserUseCase) DeleteUser(userId uint32) error {
+5 -7
View File
@@ -1,19 +1,17 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
) )
type GetPageUseCase struct { type GetPageUseCase struct {
pageRepository gateways.PageRepository pageRepository gateways.IPageRepository
} }
func NewGetPageUseCase() *GetPageUseCase { func NewGetPageUseCase(pageRepository gateways.IPageRepository) *GetPageUseCase {
return &GetPageUseCase{ return &GetPageUseCase{pageRepository}
pageRepository: *gateways.NewPageRepository(),
}
} }
func (g *GetPageUseCase) GetPage(name string, data interface{}) ([]byte, error) { func (g *GetPageUseCase) GetPage(name string, data any) ([]byte, error) {
return g.pageRepository.Get(name, data) return g.pageRepository.Get(name, data)
} }
+4 -7
View File
@@ -1,19 +1,16 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/post" "GoCMS/domain/post"
"gorm.io/gorm"
) )
type GetPostUseCase struct { type GetPostUseCase struct {
postRepository gateways.PostRepository postRepository gateways.IPostRepository
} }
func NewGetPostUseCase(db *gorm.DB) *GetPostUseCase { func NewGetPostUseCase(postRepository gateways.IPostRepository) *GetPostUseCase {
return &GetPostUseCase{ return &GetPostUseCase{postRepository}
postRepository: *gateways.NewPostRepository(db),
}
} }
func (g *GetPostUseCase) GetPost(id uint32) (post.Post, error) { func (g *GetPostUseCase) GetPost(id uint32) (post.Post, error) {
+4 -7
View File
@@ -1,19 +1,16 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/user" "GoCMS/domain/user"
"gorm.io/gorm"
) )
type GetUserUseCase struct { type GetUserUseCase struct {
userRepository gateways.UserRepository userRepository gateways.IUserRepository
} }
func NewGetUserUseCase(db *gorm.DB) *GetUserUseCase { func NewGetUserUseCase(userRepository gateways.IUserRepository) *GetUserUseCase {
return &GetUserUseCase{ return &GetUserUseCase{userRepository}
userRepository: *gateways.NewUserRepository(db),
}
} }
func (g *GetUserUseCase) GetUser(id uint32) (user.User, error) { func (g *GetUserUseCase) GetUser(id uint32) (user.User, error) {
+4 -7
View File
@@ -1,19 +1,16 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/post" "GoCMS/domain/post"
"gorm.io/gorm"
) )
type ListPostsUseCase struct { type ListPostsUseCase struct {
postRepository gateways.PostRepository postRepository gateways.IPostRepository
} }
func NewListPostsUseCase(db *gorm.DB) *ListPostsUseCase { func NewListPostsUseCase(postRepository gateways.IPostRepository) *ListPostsUseCase {
return &ListPostsUseCase{ return &ListPostsUseCase{postRepository}
postRepository: *gateways.NewPostRepository(db),
}
} }
func (g *ListPostsUseCase) ListPosts() []post.Post { func (g *ListPostsUseCase) ListPosts() []post.Post {
+4 -7
View File
@@ -1,19 +1,16 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/user" "GoCMS/domain/user"
"gorm.io/gorm"
) )
type ListUsersUseCase struct { type ListUsersUseCase struct {
userRepository gateways.UserRepository userRepository gateways.IUserRepository
} }
func NewListUsersUseCase(db *gorm.DB) *ListUsersUseCase { func NewListUsersUseCase(userRepository gateways.IUserRepository) *ListUsersUseCase {
return &ListUsersUseCase{ return &ListUsersUseCase{userRepository}
userRepository: *gateways.NewUserRepository(db),
}
} }
func (g *ListUsersUseCase) ListUsers() []user.User { func (g *ListUsersUseCase) ListUsers() []user.User {
+5 -5
View File
@@ -1,17 +1,17 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
) )
type SendMailUseCase struct { type SendMailUseCase struct {
mailRepository gateways.MailRepository mailRepository gateways.IMailRepository
} }
func NewSendMailUseCase() *SendMailUseCase { func NewSendMailUseCase(mailRepository gateways.IMailRepository) *SendMailUseCase {
return &SendMailUseCase{} return &SendMailUseCase{mailRepository}
} }
func (g *SendMailUseCase) SendMail(receiverAddress string, templateName string, data interface{}) error { func (g *SendMailUseCase) SendMail(receiverAddress string, templateName string, data any) error {
return g.mailRepository.Send(receiverAddress, templateName, data) return g.mailRepository.Send(receiverAddress, templateName, data)
} }
+4 -7
View File
@@ -1,19 +1,16 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/post" "GoCMS/domain/post"
"gorm.io/gorm"
) )
type UpdatePostUseCase struct { type UpdatePostUseCase struct {
postRepository gateways.PostRepository postRepository gateways.IPostRepository
} }
func NewUpdatePostUseCase(db *gorm.DB) *UpdatePostUseCase { func NewUpdatePostUseCase(postRepository gateways.IPostRepository) *UpdatePostUseCase {
return &UpdatePostUseCase{ return &UpdatePostUseCase{postRepository}
postRepository: *gateways.NewPostRepository(db),
}
} }
func (g *UpdatePostUseCase) UpdateBody(id uint32, body string) (post.Post, error) { func (g *UpdatePostUseCase) UpdateBody(id uint32, body string) (post.Post, error) {
+4 -7
View File
@@ -1,19 +1,16 @@
package useCases package useCases
import ( import (
"GoCMS/adapters/secondary/gateways" "GoCMS/domain/gateways"
"GoCMS/domain/user" "GoCMS/domain/user"
"gorm.io/gorm"
) )
type UpdateUserUseCase struct { type UpdateUserUseCase struct {
userRepository gateways.UserRepository userRepository gateways.IUserRepository
} }
func NewUpdateUserUseCase(db *gorm.DB) *UpdateUserUseCase { func NewUpdateUserUseCase(userRepository gateways.IUserRepository) *UpdateUserUseCase {
return &UpdateUserUseCase{ return &UpdateUserUseCase{userRepository}
userRepository: *gateways.NewUserRepository(db),
}
} }
func (g *UpdateUserUseCase) UpdateVerificationStatus(userId uint32, isVerified bool) (user.User, error) { func (g *UpdateUserUseCase) UpdateVerificationStatus(userId uint32, isVerified bool) (user.User, error) {