12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package dao
- import (
- "errors"
- "fmt"
- "github.com/allanpk716/ChineseSubFinder/internal/models"
- "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
- "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
- "gorm.io/driver/sqlite"
- "gorm.io/gorm"
- "os"
- "path/filepath"
- "sync"
- )
- // GetDb 获取数据库实例
- func GetDb() *gorm.DB {
- if db == nil {
- once.Do(func() {
- err := InitDb()
- if err != nil {
- panic(err)
- }
- })
- }
- return db
- }
- // DeleteDbFile 删除 Db 文件
- func DeleteDbFile() error {
- if db != nil {
- sqlDB, err := db.DB()
- if err != nil {
- return err
- }
- err = sqlDB.Close()
- if err != nil {
- return err
- }
- }
- // 这里需要考虑是 Windows 的时候就是在本程序的允许目录下新建数据库即可
- // 如果是 Linux 则在 /config 目录下
- nowDbFileName := getDbName()
- if my_util.IsFile(nowDbFileName) == true {
- return os.Remove(nowDbFileName)
- }
- return nil
- }
- // InitDb 初始化数据库
- func InitDb() error {
- var err error
- // 新建数据库
- nowDbFileName := getDbName()
- dbDir := filepath.Dir(nowDbFileName)
- if my_util.IsDir(dbDir) == false {
- _ = os.MkdirAll(dbDir, os.ModePerm)
- }
- db, err = gorm.Open(sqlite.Open(nowDbFileName), &gorm.Config{})
- if err != nil {
- return errors.New(fmt.Sprintf("failed to connect database, %s", err.Error()))
- }
- // 迁移 schema
- err = db.AutoMigrate(&models.HotFix{}, &models.SubFormatRec{},
- &models.IMDBInfo{}, &models.VideoSubInfo{})
- if err != nil {
- return errors.New(fmt.Sprintf("db AutoMigrate error, %s", err.Error()))
- }
- return nil
- }
- func getDbName() string {
- return filepath.Join(my_folder.GetConfigRootDirFPath(), dbFileName)
- }
- var (
- db *gorm.DB
- once sync.Once
- )
- const (
- dbFileName = "ChineseSubFinder-Cache.db"
- )
|