Files
seanime-docker/seanime-2.9.10/internal/local/database.go
2025-09-20 14:08:38 +01:00

79 lines
1.6 KiB
Go

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
}