package database import ( "GoMembership/internal/constants" "GoMembership/internal/models" "GoMembership/pkg/logger" "crypto/rand" "encoding/hex" "time" "github.com/alexedwards/argon2id" "gorm.io/driver/sqlite" "gorm.io/gorm" ) var DB *gorm.DB func Open(dbPath string) error { db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) if err != nil { return err } if err := db.AutoMigrate( &models.User{}, &models.SubscriptionModel{}, &models.Membership{}, &models.Consent{}, &models.Verification{}, &models.BankAccount{}); err != nil { logger.Error.Fatalf("Couldn't create database: %v", err) return err } DB = db logger.Info.Print("Opened DB") if err := seedDatabase(); err != nil { return err } return nil } func Close() error { logger.Info.Print("Closing DB") db, err := DB.DB() if err != nil { return err } return db.Close() } func seedDatabase() error { var count int64 DB.Model(&models.User{}).Count(&count) if count == 0 { bytes := make([]byte, 12) _, err := rand.Read(bytes) if err != nil { return err } password := hex.EncodeToString(bytes) hash, err := argon2id.CreateHash(password, argon2id.DefaultParams) if err != nil { return err } admin := models.User{ FirstName: "ad", LastName: "min", DateOfBirth: time.Now(), Password: hash, Address: "Downhill 4", ZipCode: "9999", City: "TechTown", Status: constants.ActiveStatus, RoleID: constants.Roles.Editor, } result := DB.Create(&admin) if result.Error != nil { return result.Error } logger.Error.Print("==============================================================") logger.Error.Printf("Admin Password: %v", password) logger.Error.Print("==============================================================") } return nil }