diff --git a/go-backend/cmd/membership/main.go b/go-backend/cmd/membership/main.go index 569ba4f..b10ddf5 100644 --- a/go-backend/cmd/membership/main.go +++ b/go-backend/cmd/membership/main.go @@ -18,18 +18,18 @@ func main() { config.LoadConfig() - err := database.Open(config.DB.Path, config.Recipients.AdminEmail) + db, err := database.Open(config.DB.Path, config.Recipients.AdminEmail) if err != nil { logger.Error.Fatalf("Couldn't init database: %v", err) } defer func() { - if err := database.Close(); err != nil { + if err := database.Close(db); err != nil { logger.Error.Fatalf("Failed to close database: %v", err) } }() - go server.Run() + go server.Run(db) gracefulShutdown() } diff --git a/go-backend/internal/database/db.go b/go-backend/internal/database/db.go index 3fe0ee3..f3c6543 100644 --- a/go-backend/internal/database/db.go +++ b/go-backend/internal/database/db.go @@ -15,11 +15,11 @@ import ( var DB *gorm.DB -func Open(dbPath string, adminMail string) error { +func Open(dbPath string, adminMail string) (*gorm.DB, error) { db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) if err != nil { - return err + return nil, err } if err := db.AutoMigrate( &models.User{}, @@ -31,12 +31,11 @@ func Open(dbPath string, adminMail string) error { &models.Category{}, &models.BankAccount{}); err != nil { logger.Error.Fatalf("Couldn't create database: %v", err) - return err + return nil, err } - DB = db logger.Info.Print("Opened DB") - + DB = db var categoriesCount int64 db.Model(&models.Category{}).Count(&categoriesCount) if categoriesCount == 0 { @@ -44,7 +43,7 @@ func Open(dbPath string, adminMail string) error { for _, model := range categories { result := db.Create(&model) if result.Error != nil { - return result.Error + return nil, result.Error } } } @@ -62,7 +61,7 @@ func Open(dbPath string, adminMail string) error { if exists == 0 { result := db.Create(&model) if result.Error != nil { - return result.Error + return nil, result.Error } } } @@ -72,20 +71,20 @@ func Open(dbPath string, adminMail string) error { if userCount == 0 { var createdModel models.SubscriptionModel if err := db.First(&createdModel).Error; err != nil { - return err + return nil, err } admin, err := createAdmin(adminMail, createdModel.ID) if err != nil { - return err + return nil, err } result := db.Session(&gorm.Session{FullSaveAssociations: true}).Create(&admin) if result.Error != nil { - return result.Error + return nil, result.Error } } - return nil + return db, nil } func createSubscriptionModels() []models.SubscriptionModel { @@ -167,11 +166,11 @@ func createAdmin(userMail string, subscriptionModelID uint) (*models.User, error //"DE49700500000008447644", //fake } -func Close() error { +func Close(db *gorm.DB) error { logger.Info.Print("Closing DB") - db, err := DB.DB() + database, err := db.DB() if err != nil { return err } - return db.Close() + return database.Close() } diff --git a/go-backend/internal/server/server.go b/go-backend/internal/server/server.go index 056f2bd..3fab15a 100644 --- a/go-backend/internal/server/server.go +++ b/go-backend/internal/server/server.go @@ -20,13 +20,14 @@ import ( "GoMembership/pkg/logger" "github.com/gin-gonic/gin" + "gorm.io/gorm" ) var shutdownChannel = make(chan struct{}) var srv *http.Server // Run initializes the server configuration, sets up services and controllers, and starts the HTTP server. -func Run() { +func Run(db *gorm.DB) { emailService := services.NewEmailService(config.SMTP.Host, config.SMTP.Port, config.SMTP.User, config.SMTP.Password) var consentRepo repositories.ConsentRepositoryInterface = &repositories.ConsentRepository{} @@ -41,13 +42,11 @@ func Run() { var licenceRepo repositories.LicenceInterface = &repositories.LicenceRepository{} licenceService := &services.LicenceService{Repo: licenceRepo} - - var userRepo repositories.UserRepositoryInterface = &repositories.UserRepository{} - userService := &services.UserService{Repo: userRepo, Licences: licenceRepo} + userService := &services.UserService{DB: db, Licences: licenceRepo} userController := &controllers.UserController{Service: userService, EmailService: emailService, ConsentService: consentService, LicenceService: licenceService, BankAccountService: bankAccountService, MembershipService: membershipService} - membershipController := &controllers.MembershipController{Service: *membershipService, UserController: userController} - licenceController := &controllers.LicenceController{Service: *licenceService} + membershipController := &controllers.MembershipController{Service: membershipService, UserService: userService} + licenceController := &controllers.LicenceController{Service: licenceService} contactController := &controllers.ContactController{EmailService: emailService} router := gin.Default() @@ -65,7 +64,7 @@ func Run() { router.Use(middlewares.RateLimitMiddleware(limiter)) routes.RegisterRoutes(router, userController, membershipController, contactController, licenceController) - validation.SetupValidators() + validation.SetupValidators(db) logger.Info.Println("Starting server on :8080") srv = &http.Server{