92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
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())
|
|
}
|
|
}
|