Private
Public Access
1
0
Files
u-desk/internal/storage/sqlite.go

58 lines
951 B
Go

package storage
import (
"go-desk/internal/storage/models"
"os"
"path/filepath"
"time"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var globalDB *gorm.DB
func Init() (*gorm.DB, error) {
if globalDB != nil {
return globalDB, nil
}
homeDir, err := os.UserHomeDir()
if err != nil {
return nil, err
}
dataDir := filepath.Join(homeDir, ".go-desk")
os.MkdirAll(dataDir, 0755)
dbPath := filepath.Join(dataDir, "db-cli.db")
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
return nil, err
}
sqlDB, _ := db.DB()
sqlDB.SetMaxOpenConns(1)
sqlDB.SetMaxIdleConns(1)
sqlDB.SetConnMaxLifetime(time.Hour)
if err := db.AutoMigrate(
&models.DbConnection{},
&models.SqlTab{},
&models.SqlResultHistory{},
); err != nil {
return nil, err
}
globalDB = db
return globalDB, nil
}
func GetDB() *gorm.DB {
return globalDB
}