From 313c95798133eb369264dcfa16ed507011744ec9 Mon Sep 17 00:00:00 2001 From: Cindy Tat Date: Thu, 23 Apr 2026 16:07:29 -0700 Subject: [PATCH] create router.go and create setupRounter() function --- cmd/server/main.go | 46 ++----------------------------- cmd/server/router.go | 64 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 44 deletions(-) create mode 100644 cmd/server/router.go diff --git a/cmd/server/main.go b/cmd/server/main.go index 788368b..d9baa08 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -10,13 +10,8 @@ import ( "syscall" "time" - "github.com/gin-contrib/cors" - "github.com/gin-gonic/gin" - "github.com/SCE-Development/SCEvents/internal/config" "github.com/SCE-Development/SCEvents/pkg/db" - "github.com/SCE-Development/SCEvents/pkg/handlers" - "github.com/SCE-Development/SCEvents/pkg/middleware" "github.com/SCE-Development/SCEvents/pkg/registration" ) @@ -46,16 +41,10 @@ func main() { ctx, cancel := context.WithCancel(context.Background()) - redisStore := db.NewRedisStore(db.RedisClient()) stores := &db.Stores{ - Redis: redisStore, + Redis: db.NewRedisStore(db.RedisClient()), } - producer := registration.NewProducer( - []string{cfg.KafkaBroker}, - cfg.KafkaTopic, - ) - consumer := registration.NewConsumer( []string{cfg.KafkaBroker}, cfg.KafkaTopic, @@ -63,8 +52,6 @@ func main() { stores, ) - eventHandler := handlers.NewEventHandler(stores) - var wg sync.WaitGroup wg.Add(1) go func() { @@ -72,36 +59,7 @@ func main() { consumer.Run(ctx) }() - r := gin.Default() - - config := cors.DefaultConfig() - config.AllowOrigins = []string{cfg.ClientURL} - config.AllowCredentials = true - config.AddAllowHeaders("Authorization") - r.Use(cors.New(config)) - - r.GET("/ping", func(c *gin.Context) { - c.JSON(http.StatusOK, gin.H{ - "message": "response", - }) - }) - - events := r.Group("/events") - { - events.GET("/", eventHandler.GetEvents) - events.GET("/:id", eventHandler.GetEventByID) - events.GET("/registrations/:request_id", eventHandler.GetRegistrationStatus) - - protected := events.Group("/") - protected.Use(middleware.RequireAuth(middleware.MembershipStateNonMember, cfg.ClientAPIURL)) - { - protected.POST("/", eventHandler.CreateEvent) - protected.POST("/:id/register", eventHandler.RegisterForEvent(producer)) - protected.POST("/:id/waitlist", eventHandler.JoinEventWaitlist) - protected.DELETE("/:id", eventHandler.DeleteEventByID) - protected.PATCH("/:id", eventHandler.UpdateEventByID) - } - } + r, producer := setupRouter(cfg) srv := &http.Server{ Addr: ":" + cfg.ServerPort, diff --git a/cmd/server/router.go b/cmd/server/router.go new file mode 100644 index 0000000..6a0f54b --- /dev/null +++ b/cmd/server/router.go @@ -0,0 +1,64 @@ +package main + +import ( + "net/http" + + "github.com/gin-contrib/cors" + "github.com/gin-gonic/gin" + "github.com/SCE-Development/SCEvents/internal/config" + "github.com/SCE-Development/SCEvents/pkg/db" + "github.com/SCE-Development/SCEvents/pkg/handlers" + "github.com/SCE-Development/SCEvents/pkg/middleware" + "github.com/SCE-Development/SCEvents/pkg/registration" +) + +func setupRouter(cfg config.AppConfig) (*gin.Engine, *registration.Producer) { + redisStore := db.NewRedisStore(db.RedisClient()) + stores := &db.Stores{ + Redis: redisStore, + } + + producer := registration.NewProducer( + []string{cfg.KafkaBroker}, + cfg.KafkaTopic, + ) + + r := gin.Default() + + // Set up CORS + config := cors.DefaultConfig() + config.AllowOrigins = []string{cfg.ClientURL} + config.AllowCredentials = true + config.AddAllowHeaders("Authorization") + r.Use(cors.New(config)) + + // Create handlers + eventHandler := handlers.NewEventHandler(stores) + + // Ping route + r.GET("/ping", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "message": "response", + }) + }) + + // Events routes + events := r.Group("/events") + { + events.GET("/", eventHandler.GetEvents) + events.GET("/:id", eventHandler.GetEventByID) + events.GET("/registrations/:request_id", eventHandler.GetRegistrationStatus) + + protected := events.Group("/") + protected.Use(middleware.RequireAuth(middleware.MembershipStateNonMember, cfg.ClientAPIURL)) + { + protected.POST("/", eventHandler.CreateEvent) + protected.DELETE("/:id", eventHandler.DeleteEventByID) + protected.PATCH("/:id", eventHandler.UpdateEventByID) + protected.POST("/:id/register", eventHandler.RegisterForEvent(producer)) + protected.POST("/:id/waitlist", eventHandler.JoinEventWaitlist) + } + } + + return r, producer +} \ No newline at end of file