package models import ( "InfantrySkillCalculator/utils" "cache" "github.com/glebarez/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" "os" "time" ) var DB *gorm.DB var PlayerCache *cache.PlayerCache 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 { utils.Logger.Fatal("[SETUP] Failed to connect to database! " + err.Error()) } err = database.AutoMigrate(&Clan{}) if err != nil { utils.Logger.Fatal("[SETUP] Failed to migrate database! " + err.Error()) } err = database.AutoMigrate(&Player{}) if err != nil { utils.Logger.Fatal("[SETUP] Failed to migrate database! " + err.Error()) } err = database.AutoMigrate(&User{}) if err != nil { utils.Logger.Fatal("[SETUP] Failed to migrate database! " + err.Error()) } err = database.AutoMigrate(&ActivationCode{}) if err != nil { utils.Logger.Fatal("[SETUP] Failed to migrate database! " + err.Error()) } err = database.AutoMigrate(&Game{}) if err != nil { utils.Logger.Fatal("[SETUP] Failed to migrate database! " + err.Error()) } 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"}) utils.Logger.Println("[SETUP] Created first games") } } err = database.AutoMigrate(&UserSettings{}) if err != nil { utils.Logger.Fatal("[SETUP] Failed to migrate database! " + err.Error()) } DB = database } func ConnectCache(playerCacheLifetime time.Duration, expireCallback func(key string)) { address := os.Getenv("REDIS_ADDRESS") if address == "" { address = "127.0.0.1:6379" } PlayerCache = cache.NewPlayerCache(address, playerCacheLifetime, expireCallback) if err := PlayerCache.Connect(); err != nil { PlayerCache = nil utils.Logger.Fatal("[SETUP] Failed to connect to Redis! " + err.Error()) } }