package models import ( "InfantrySkillCalculator/utils" "context" "github.com/redis/go-redis/v9" "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" "log" ) var DB *gorm.DB var ctx = context.Background() var Cache *redis.Client func ConnectDatabase() { database, err := gorm.Open(sqlite.Open("isc_data.db"), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), SkipDefaultTransaction: true, PrepareStmt: true, }) if err != nil { panic("Failed to connect to database! " + err.Error()) } err = database.AutoMigrate(&Clan{}) if err != nil { log.Fatal(err) } err = database.AutoMigrate(&Player{}) if err != nil { log.Fatal(err) } err = database.AutoMigrate(&PlayerCache{}) if err != nil { log.Fatal(err) } err = database.AutoMigrate(&User{}) if err != nil { log.Fatal(err) } err = database.AutoMigrate(&ActivationCode{}) if err != nil { log.Fatal(err) } else { var code ActivationCode if err := database.First(&code).Error; err != nil { firstCode := utils.GenerateActivationCode() database.Create(&ActivationCode{Code: firstCode, UserRole: AdminRole}) log.Println("Created first activation code with ADMIN role:\n" + firstCode) } } err = database.AutoMigrate(&Game{}) if err != nil { log.Fatal(err) } else { var game Game if err := database.First(&game).Error; err != nil { database.Create(&Game{Name: "Battlefield V", Tag: "BFV"}) database.Create(&Game{Name: "Battlefield 2042", Tag: "BF2042"}) log.Println("Created first games") } } err = database.AutoMigrate(&MetricSetting{}) if err != nil { log.Fatal(err) } err = database.AutoMigrate(&UserSettings{}) if err != nil { log.Fatal(err) } DB = database } func ConnectCache() { Cache = redis.NewClient(&redis.Options{ Addr: "127.0.0.1:6379", Password: "", DB: 0, }) _, err := Cache.Ping(ctx).Result() if err != nil { Cache = nil log.Fatal("Failed to connect to Redis! " + err.Error()) } }