first step to remove global database.db

This commit is contained in:
Alex
2025-03-11 20:45:49 +01:00
parent ca441d51e7
commit 294ad76e4b
3 changed files with 22 additions and 24 deletions

View File

@@ -18,18 +18,18 @@ func main() {
config.LoadConfig() config.LoadConfig()
err := database.Open(config.DB.Path, config.Recipients.AdminEmail) db, err := database.Open(config.DB.Path, config.Recipients.AdminEmail)
if err != nil { if err != nil {
logger.Error.Fatalf("Couldn't init database: %v", err) logger.Error.Fatalf("Couldn't init database: %v", err)
} }
defer func() { defer func() {
if err := database.Close(); err != nil { if err := database.Close(db); err != nil {
logger.Error.Fatalf("Failed to close database: %v", err) logger.Error.Fatalf("Failed to close database: %v", err)
} }
}() }()
go server.Run() go server.Run(db)
gracefulShutdown() gracefulShutdown()
} }

View File

@@ -15,11 +15,11 @@ import (
var DB *gorm.DB 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{}) db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
if err != nil { if err != nil {
return err return nil, err
} }
if err := db.AutoMigrate( if err := db.AutoMigrate(
&models.User{}, &models.User{},
@@ -31,12 +31,11 @@ func Open(dbPath string, adminMail string) error {
&models.Category{}, &models.Category{},
&models.BankAccount{}); err != nil { &models.BankAccount{}); err != nil {
logger.Error.Fatalf("Couldn't create database: %v", err) logger.Error.Fatalf("Couldn't create database: %v", err)
return err return nil, err
} }
DB = db
logger.Info.Print("Opened DB") logger.Info.Print("Opened DB")
DB = db
var categoriesCount int64 var categoriesCount int64
db.Model(&models.Category{}).Count(&categoriesCount) db.Model(&models.Category{}).Count(&categoriesCount)
if categoriesCount == 0 { if categoriesCount == 0 {
@@ -44,7 +43,7 @@ func Open(dbPath string, adminMail string) error {
for _, model := range categories { for _, model := range categories {
result := db.Create(&model) result := db.Create(&model)
if result.Error != nil { 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 { if exists == 0 {
result := db.Create(&model) result := db.Create(&model)
if result.Error != nil { 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 { if userCount == 0 {
var createdModel models.SubscriptionModel var createdModel models.SubscriptionModel
if err := db.First(&createdModel).Error; err != nil { if err := db.First(&createdModel).Error; err != nil {
return err return nil, err
} }
admin, err := createAdmin(adminMail, createdModel.ID) admin, err := createAdmin(adminMail, createdModel.ID)
if err != nil { if err != nil {
return err return nil, err
} }
result := db.Session(&gorm.Session{FullSaveAssociations: true}).Create(&admin) result := db.Session(&gorm.Session{FullSaveAssociations: true}).Create(&admin)
if result.Error != nil { if result.Error != nil {
return result.Error return nil, result.Error
} }
} }
return nil return db, nil
} }
func createSubscriptionModels() []models.SubscriptionModel { func createSubscriptionModels() []models.SubscriptionModel {
@@ -167,11 +166,11 @@ func createAdmin(userMail string, subscriptionModelID uint) (*models.User, error
//"DE49700500000008447644", //fake //"DE49700500000008447644", //fake
} }
func Close() error { func Close(db *gorm.DB) error {
logger.Info.Print("Closing DB") logger.Info.Print("Closing DB")
db, err := DB.DB() database, err := db.DB()
if err != nil { if err != nil {
return err return err
} }
return db.Close() return database.Close()
} }

View File

@@ -20,13 +20,14 @@ import (
"GoMembership/pkg/logger" "GoMembership/pkg/logger"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"gorm.io/gorm"
) )
var shutdownChannel = make(chan struct{}) var shutdownChannel = make(chan struct{})
var srv *http.Server var srv *http.Server
// Run initializes the server configuration, sets up services and controllers, and starts the 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) emailService := services.NewEmailService(config.SMTP.Host, config.SMTP.Port, config.SMTP.User, config.SMTP.Password)
var consentRepo repositories.ConsentRepositoryInterface = &repositories.ConsentRepository{} var consentRepo repositories.ConsentRepositoryInterface = &repositories.ConsentRepository{}
@@ -41,13 +42,11 @@ func Run() {
var licenceRepo repositories.LicenceInterface = &repositories.LicenceRepository{} var licenceRepo repositories.LicenceInterface = &repositories.LicenceRepository{}
licenceService := &services.LicenceService{Repo: licenceRepo} licenceService := &services.LicenceService{Repo: licenceRepo}
userService := &services.UserService{DB: db, Licences: licenceRepo}
var userRepo repositories.UserRepositoryInterface = &repositories.UserRepository{}
userService := &services.UserService{Repo: userRepo, Licences: licenceRepo}
userController := &controllers.UserController{Service: userService, EmailService: emailService, ConsentService: consentService, LicenceService: licenceService, BankAccountService: bankAccountService, MembershipService: membershipService} userController := &controllers.UserController{Service: userService, EmailService: emailService, ConsentService: consentService, LicenceService: licenceService, BankAccountService: bankAccountService, MembershipService: membershipService}
membershipController := &controllers.MembershipController{Service: *membershipService, UserController: userController} membershipController := &controllers.MembershipController{Service: membershipService, UserService: userService}
licenceController := &controllers.LicenceController{Service: *licenceService} licenceController := &controllers.LicenceController{Service: licenceService}
contactController := &controllers.ContactController{EmailService: emailService} contactController := &controllers.ContactController{EmailService: emailService}
router := gin.Default() router := gin.Default()
@@ -65,7 +64,7 @@ func Run() {
router.Use(middlewares.RateLimitMiddleware(limiter)) router.Use(middlewares.RateLimitMiddleware(limiter))
routes.RegisterRoutes(router, userController, membershipController, contactController, licenceController) routes.RegisterRoutes(router, userController, membershipController, contactController, licenceController)
validation.SetupValidators() validation.SetupValidators(db)
logger.Info.Println("Starting server on :8080") logger.Info.Println("Starting server on :8080")
srv = &http.Server{ srv = &http.Server{