package server import ( "net/http" "GoMembership/internal/config" "GoMembership/internal/controllers" "GoMembership/internal/database" "GoMembership/internal/middlewares" "GoMembership/internal/repositories" "GoMembership/internal/routes" "GoMembership/internal/services" "GoMembership/pkg/logger" "github.com/gorilla/mux" ) func Run() { cfg := config.LoadConfig() logger.Info.Printf("Config: %+v", cfg) db, err := database.InitDB(cfg.DB.Path) if err != nil { logger.Error.Fatalf("Couldn't init database: %v", err) } emailService := services.NewEmailService(cfg.SMTP.Host, cfg.SMTP.Port, cfg.SMTP.User, cfg.SMTP.Password, cfg.SMTP.AdminEmail) consentRepo := repositories.NewConsentRepository(db) consentService := services.NewConsentService(consentRepo) bankAccountRepo := repositories.NewBankAccountRepository(db) bankAccountService := services.NewBankAccountService(bankAccountRepo) membershipRepo := repositories.NewMembershipRepository(db) planRepo := repositories.NewSubscriptionModelsRepository(db) membershipService := services.NewMembershipService(membershipRepo, planRepo) userRepo := repositories.NewUserRepository(db) userService := services.NewUserService(userRepo) userController := controllers.NewUserController(userService, emailService, consentService, bankAccountService, membershipService) membershipController := controllers.NewMembershipController(membershipService) 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, membershipController) // 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) } }