ai-gateway/model/main.go

105 lines
2.0 KiB
Go
Raw Normal View History

2023-04-22 12:39:27 +00:00
package model
import (
"gorm.io/driver/mysql"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
2023-04-22 13:14:09 +00:00
"one-api/common"
2023-04-22 12:39:27 +00:00
"os"
)
var DB *gorm.DB
func createRootAccountIfNeed() error {
var user User
//if user.Status != common.UserStatusEnabled {
if err := DB.First(&user).Error; err != nil {
common.SysLog("no user exists, create a root user for you: username is root, password is 123456")
hashedPassword, err := common.Password2Hash("123456")
if err != nil {
return err
}
rootUser := User{
Username: "root",
Password: hashedPassword,
Role: common.RoleRootUser,
Status: common.UserStatusEnabled,
DisplayName: "Root User",
AccessToken: common.GetUUID(),
2023-05-21 02:05:34 +00:00
Quota: 100000000,
2023-04-22 12:39:27 +00:00
}
DB.Create(&rootUser)
}
return nil
}
func CountTable(tableName string) (num int64) {
DB.Table(tableName).Count(&num)
return
}
func InitDB() (err error) {
var db *gorm.DB
if os.Getenv("SQL_DSN") != "" {
// Use MySQL
db, err = gorm.Open(mysql.Open(os.Getenv("SQL_DSN")), &gorm.Config{
PrepareStmt: true, // precompile SQL
})
} else {
// Use SQLite
2023-04-23 10:24:11 +00:00
common.UsingSQLite = true
2023-04-22 12:39:27 +00:00
db, err = gorm.Open(sqlite.Open(common.SQLitePath), &gorm.Config{
PrepareStmt: true, // precompile SQL
})
common.SysLog("SQL_DSN not set, using SQLite as database")
}
if err == nil {
DB = db
if !common.IsMasterNode {
return nil
}
2023-04-22 13:41:16 +00:00
err := db.AutoMigrate(&Channel{})
2023-04-22 12:39:27 +00:00
if err != nil {
return err
}
2023-04-23 04:43:10 +00:00
err = db.AutoMigrate(&Token{})
if err != nil {
return err
}
2023-04-22 12:39:27 +00:00
err = db.AutoMigrate(&User{})
if err != nil {
return err
}
err = db.AutoMigrate(&Option{})
if err != nil {
return err
}
err = db.AutoMigrate(&Redemption{})
if err != nil {
return err
}
err = db.AutoMigrate(&Ability{})
if err != nil {
return err
}
err = db.AutoMigrate(&Log{})
if err != nil {
return err
}
2023-04-22 12:39:27 +00:00
err = createRootAccountIfNeed()
return err
} else {
common.FatalLog(err)
}
return err
}
func CloseDB() error {
sqlDB, err := DB.DB()
if err != nil {
return err
}
err = sqlDB.Close()
return err
}