package server import ( "GoMembership/internal/config" "GoMembership/internal/controllers" "GoMembership/internal/database" "GoMembership/internal/middlewares" "GoMembership/internal/repositories" "GoMembership/internal/routes" "GoMembership/internal/services" "GoMembership/pkg/logger" "net/http" "github.com/gorilla/mux" ) func Run() { cfg := config.LoadConfig() db := database.Connect(cfg.DB) defer db.Close() emailService := services.NewEmailService(cfg.SMTP.Host, cfg.SMTP.Port, cfg.SMTP.User, cfg.SMTP.Password, cfg.SMTP.AdminEmail) userRepo := repositories.NewUserRepository(db) userService := services.NewUserService(userRepo) userController := controllers.NewUserController(userService, emailService) router := mux.NewRouter() // router.Handle("/csrf-token", middlewares.GenerateCSRFTokenHandler()).Methods("GET") // Apply CSRF middleware // router.Use(middlewares.CSRFMiddleware) router.Use(middlewares.LoggerMiddleware) routes.RegisterRoutes(router, userController) // create subrouter for teh authenticated area /account // also pthprefix matches everything below /account // accountRouter := router.PathPrefix("/account").Subrouter() // accountRouter.Use(middlewares.AuthMiddleware) logger.Info.Println("Starting server on :8080") if err := http.ListenAndServe(":8080", router); err != nil { logger.Error.Fatalf("could not start server: %v", err) } }