package local import ( "fmt" "log" "os" "path/filepath" "time" "github.com/glebarez/sqlite" "github.com/rs/zerolog" "gorm.io/gorm" gormlogger "gorm.io/gorm/logger" ) type Database struct { gormdb *gorm.DB logger *zerolog.Logger } func newLocalSyncDatabase(appDataDir, dbName string, logger *zerolog.Logger) (*Database, 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 &Database{ gormdb: db, logger: logger, }, nil } // MigrateTables performs auto migration on the database func migrateTables(db *gorm.DB) error { err := db.AutoMigrate( &Settings{}, &LocalCollection{}, &SimulatedCollection{}, &AnimeSnapshot{}, &MangaSnapshot{}, &TrackedMedia{}, ) if err != nil { return err } return nil }