Files
seanime/internal/platform/local_platform_database.go
5rahim 25242bf54b more refactoring
fix: runtime panic when manually syncing progress offline
2024-07-15 14:16:42 -04:00

72 lines
1.5 KiB
Go

package platform
import (
"fmt"
"github.com/glebarez/sqlite"
"github.com/rs/zerolog"
"gorm.io/gorm"
gormlogger "gorm.io/gorm/logger"
"log"
"os"
"path/filepath"
"time"
)
type LocalPlatformDatabase struct {
gormdb *gorm.DB
logger *zerolog.Logger
}
func newLocalPlatformDatabase(appDataDir, dbName string, logger *zerolog.Logger) (*LocalPlatformDatabase, error) {
// Set the SQLite database path
var sqlitePath string
if os.Getenv("TEST_ENV") == "true" {
sqlitePath = ":memory:"
} else {
sqlitePath = filepath.Join(appDataDir, dbName+".db")
}
// Connect to the SQLite database
db, err := gorm.Open(sqlite.Open(sqlitePath), &gorm.Config{
Logger: gormlogger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
gormlogger.Config{
SlowThreshold: time.Second,
LogLevel: gormlogger.Error,
IgnoreRecordNotFoundError: true,
ParameterizedQueries: false,
Colorful: true,
},
),
})
if err != nil {
return nil, err
}
// Migrate tables
err = migrateTables(db)
if err != nil {
logger.Fatal().Err(err).Msg("local platform: Failed to perform auto migration")
return nil, err
}
logger.Info().Str("name", fmt.Sprintf("%s.db", dbName)).Msg("local platform: Database instantiated")
return &LocalPlatformDatabase{
gormdb: db,
logger: logger,
}, nil
}
// MigrateTables performs auto migration on the database
func migrateTables(db *gorm.DB) error {
err := db.AutoMigrate()
if err != nil {
return err
}
return nil
}