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/gin-gonic/gin" ) 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) subscriptionRepo := repositories.NewSubscriptionModelsRepository(db) membershipService := services.NewMembershipService(membershipRepo, subscriptionRepo) userRepo := repositories.NewUserRepository(db) userService := services.NewUserService(userRepo) userController := controllers.NewUserController(userService, emailService, consentService, bankAccountService, membershipService) membershipController := controllers.NewMembershipController(membershipService) router := gin.Default() // gin.SetMode(gin.ReleaseMode) router.Use(gin.Logger()) // 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) } }