From 943925c3e96abacd93ad8d5e3759f970ac36c3ae Mon Sep 17 00:00:00 2001 From: Mohammad Mahdi Date: Wed, 14 May 2025 20:03:06 +0330 Subject: [PATCH] Refactor handlers into separate packages and implement dependency injection. IDK if this shit is good or even logical, but it works and I can wrap my head around it. --- cmd/main.go | 2 +- internal/AppWebContext.go | 13 +++++------ internal/handlers/admin/adminDash.go | 35 ++++++++++++++++++++++++++++ internal/handlers/adminDash.go | 9 ------- internal/handlers/approveMedia.go | 9 ------- internal/handlers/home/mainPage.go | 23 ++++++++++++++++++ internal/handlers/mainPage.go | 9 ------- internal/handlers/rejectMedia.go | 9 ------- internal/server/router.go | 19 ++++++++------- 9 files changed, 76 insertions(+), 52 deletions(-) create mode 100644 internal/handlers/admin/adminDash.go delete mode 100644 internal/handlers/adminDash.go delete mode 100644 internal/handlers/approveMedia.go create mode 100644 internal/handlers/home/mainPage.go delete mode 100644 internal/handlers/mainPage.go delete mode 100644 internal/handlers/rejectMedia.go diff --git a/cmd/main.go b/cmd/main.go index 492c745..c3bdfee 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -53,7 +53,7 @@ func main() { // https://seefnasrul.medium.com/create-your-first-go-rest-api-with-jwt-authentication-in-gin-framework-dbe5bda72817 engine := gin.Default() - r := server.SetupRouter(engine) + r := server.SetupRouter(engine, appContext) err := r.Run(":8080") if err != nil { log.Fatal(err) diff --git a/internal/AppWebContext.go b/internal/AppWebContext.go index 455d6c6..c529ced 100644 --- a/internal/AppWebContext.go +++ b/internal/AppWebContext.go @@ -1,12 +1,11 @@ package internal import ( - "github.com/gin-gonic/gin" - "gorm.io/gorm" + // "github.com/gin-gonic/gin" + // "gorm.io/gorm" ) -type AppWebContext struct { - Db *gorm.DB - GinEngine *gin.Engine - -} \ No newline at end of file +// type AppWebContext struct { +// Db *gorm.DB +// GinEngine *gin.Engine +// } \ No newline at end of file diff --git a/internal/handlers/admin/adminDash.go b/internal/handlers/admin/adminDash.go new file mode 100644 index 0000000..98812d5 --- /dev/null +++ b/internal/handlers/admin/adminDash.go @@ -0,0 +1,35 @@ +package handlers_admin + +import ( + "CatsOfMastodonBotGo/internal" + + "github.com/gin-gonic/gin" +) + +type AdminDashboardHandler struct { + AppContext *internal.AppContext +} + +func NewAdminDashboardHandler(appContext *internal.AppContext) *AdminDashboardHandler { + return &AdminDashboardHandler{ + AppContext: appContext, + } +} + +func (appContext *AdminDashboardHandler) AdminHomePage(c *gin.Context) { + c.JSON(200, gin.H{ + "YouAreOn": "AdminDashboardHomePage", + }) +} + +func (appContext *AdminDashboardHandler) ApproveMedia(c *gin.Context) { + c.JSON(200, gin.H{ + "YouAreOn": "ApproveMedia", + }) +} + +func (appContext *AdminDashboardHandler) RejectMedia(c *gin.Context) { + c.JSON(200, gin.H{ + "YouAreOn": "RejectMedia", + }) +} \ No newline at end of file diff --git a/internal/handlers/adminDash.go b/internal/handlers/adminDash.go deleted file mode 100644 index a9fe53c..0000000 --- a/internal/handlers/adminDash.go +++ /dev/null @@ -1,9 +0,0 @@ -package handlers - -import "github.com/gin-gonic/gin" - -func AdminDashboardHandler (c *gin.Context) { - c.JSON(200, gin.H{ - "YouAreOn": "AdminDashboard", - }) -} \ No newline at end of file diff --git a/internal/handlers/approveMedia.go b/internal/handlers/approveMedia.go deleted file mode 100644 index 7947d62..0000000 --- a/internal/handlers/approveMedia.go +++ /dev/null @@ -1,9 +0,0 @@ -package handlers - -import "github.com/gin-gonic/gin" - -func ApproveMediaHandler (c *gin.Context) { - c.JSON(200, gin.H{ - "YouAreOn": "ApproveMedia", - }) -} \ No newline at end of file diff --git a/internal/handlers/home/mainPage.go b/internal/handlers/home/mainPage.go new file mode 100644 index 0000000..3111826 --- /dev/null +++ b/internal/handlers/home/mainPage.go @@ -0,0 +1,23 @@ +package handlers_home + +import ( + "CatsOfMastodonBotGo/internal" + + "github.com/gin-gonic/gin" +) + +type MainPageHandler struct{ + AppContext *internal.AppContext +} + +func NewMainPageHandler(appContext *internal.AppContext) *MainPageHandler { + return &MainPageHandler{ + AppContext: appContext, + } +} + +func (appContext *MainPageHandler) HomePageHandler(c *gin.Context) { + c.JSON(200, gin.H{ + "YouAreOn": "HomePage", + }) +} \ No newline at end of file diff --git a/internal/handlers/mainPage.go b/internal/handlers/mainPage.go deleted file mode 100644 index fa2874e..0000000 --- a/internal/handlers/mainPage.go +++ /dev/null @@ -1,9 +0,0 @@ -package handlers - -import "github.com/gin-gonic/gin" - -func MainPageHandler (c *gin.Context) { - c.JSON(200, gin.H{ - "YouAreOn": "MainPage", - }) -} \ No newline at end of file diff --git a/internal/handlers/rejectMedia.go b/internal/handlers/rejectMedia.go deleted file mode 100644 index 8bbce39..0000000 --- a/internal/handlers/rejectMedia.go +++ /dev/null @@ -1,9 +0,0 @@ -package handlers - -import "github.com/gin-gonic/gin" - -func RejectMediaHandler (c *gin.Context) { - c.JSON(200, gin.H{ - "YouAreOn": "RejectMedia", - }) -} \ No newline at end of file diff --git a/internal/server/router.go b/internal/server/router.go index a4fa4bf..2ee0640 100644 --- a/internal/server/router.go +++ b/internal/server/router.go @@ -1,24 +1,27 @@ package server import ( - "CatsOfMastodonBotGo/internal/handlers" - + "CatsOfMastodonBotGo/internal" + handlers_admin "CatsOfMastodonBotGo/internal/handlers/admin" + handlers_home "CatsOfMastodonBotGo/internal/handlers/home" + "github.com/gin-gonic/gin" ) -func SetupRouter(r *gin.Engine) *gin.Engine { - +func SetupRouter(r *gin.Engine, appContext *internal.AppContext) *gin.Engine { + adminDashboardHandler := handlers_admin.NewAdminDashboardHandler(appContext) + homePageHandler := handlers_home.NewMainPageHandler(appContext) admin := r.Group("/admin") - admin.GET("/", handlers.AdminDashboardHandler) - admin.POST("/approve", handlers.ApproveMediaHandler) - admin.POST("/reject", handlers.RejectMediaHandler) + admin.GET("/", adminDashboardHandler.AdminHomePage) + admin.POST("/approve", adminDashboardHandler.ApproveMedia) + admin.POST("/reject", adminDashboardHandler.RejectMedia) -r.GET("/", handlers.MainPageHandler) +r.GET("/", homePageHandler.HomePageHandler) return r }