remove globals

This commit is contained in:
sentriz
2020-05-03 04:43:00 +01:00
parent 9bf80f4b18
commit ee9335f71e
11 changed files with 188 additions and 163 deletions

View File

@@ -31,9 +31,8 @@ func wrapMigrations(migrs ...gormigrate.Migration) []*gormigrate.Migration {
return ret
}
var (
dbMaxOpenConns = 1
dbOptions = url.Values{
func defaultOptions() url.Values {
return url.Values{
// with this, multiple connections share a single data and schema cache.
// see https://www.sqlite.org/sharedcache.html
"cache": {"shared"},
@@ -43,7 +42,7 @@ var (
"_journal_mode": {"WAL"},
"_foreign_keys": {"true"},
}
)
}
type DB struct {
*gorm.DB
@@ -55,13 +54,13 @@ func New(path string) (*DB, error) {
Scheme: "file",
Opaque: path,
}
url.RawQuery = dbOptions.Encode()
url.RawQuery = defaultOptions().Encode()
db, err := gorm.Open("sqlite3", url.String())
if err != nil {
return nil, fmt.Errorf("with gorm: %w", err)
}
db.SetLogger(log.New(os.Stdout, "gorm ", 0))
db.DB().SetMaxOpenConns(dbMaxOpenConns)
db.DB().SetMaxOpenConns(1)
migrOptions := &gormigrate.Options{
TableName: "migrations",
IDColumnName: "id",
@@ -69,13 +68,13 @@ func New(path string) (*DB, error) {
UseTransaction: false,
}
migr := gormigrate.New(db, migrOptions, wrapMigrations(
migrationInitSchema,
migrationCreateInitUser,
migrationMergePlaylist,
migrationCreateTranscode,
migrationAddGenre,
migrationUpdateTranscodePrefIDX,
migrationAddAlbumIDX,
migrateInitSchema(),
migrateCreateInitUser(),
migrateMergePlaylist(),
migrateCreateTranscode(),
migrateAddGenre(),
migrateUpdateTranscodePrefIDX(),
migrateAddAlbumIDX(),
))
if err = migr.Migrate(); err != nil {
return nil, fmt.Errorf("migrating to latest version: %w", err)

View File

@@ -9,55 +9,58 @@ import (
// $ date '+%Y%m%d%H%M'
// not really a migration
var migrationInitSchema = gormigrate.Migration{
ID: "202002192100",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
Artist{},
Track{},
User{},
Setting{},
Play{},
Album{},
Playlist{},
PlayQueue{},
).
Error
},
func migrateInitSchema() gormigrate.Migration {
return gormigrate.Migration{
ID: "202002192100",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
Artist{},
Track{},
User{},
Setting{},
Play{},
Album{},
Playlist{},
PlayQueue{},
).
Error
},
}
}
// not really a migration
var migrationCreateInitUser = gormigrate.Migration{
ID: "202002192019",
Migrate: func(tx *gorm.DB) error {
const (
initUsername = "admin"
initPassword = "admin"
)
err := tx.
Where("name=?", initUsername).
First(&User{}).
Error
if !gorm.IsRecordNotFoundError(err) {
return nil
}
return tx.Create(&User{
Name: initUsername,
Password: initPassword,
IsAdmin: true,
}).
Error
},
func migrateCreateInitUser() gormigrate.Migration {
return gormigrate.Migration{
ID: "202002192019",
Migrate: func(tx *gorm.DB) error {
const (
initUsername = "admin"
initPassword = "admin"
)
err := tx.
Where("name=?", initUsername).
First(&User{}).
Error
if !gorm.IsRecordNotFoundError(err) {
return nil
}
return tx.Create(&User{
Name: initUsername,
Password: initPassword,
IsAdmin: true,
}).
Error
},
}
}
var migrationMergePlaylist = gormigrate.Migration{
ID: "202002192222",
Migrate: func(tx *gorm.DB) error {
if !tx.HasTable("playlist_items") {
return nil
}
return tx.Exec(`
func migrateMergePlaylist() gormigrate.Migration {
return gormigrate.Migration{
ID: "202002192222",
Migrate: func(tx *gorm.DB) error {
if !tx.HasTable("playlist_items") {
return nil
}
return tx.Exec(`
UPDATE playlists
SET items=( SELECT group_concat(track_id) FROM (
SELECT track_id
@@ -66,78 +69,87 @@ var migrationMergePlaylist = gormigrate.Migration{
ORDER BY created_at
) );
DROP TABLE playlist_items;`,
).
Error
},
).
Error
},
}
}
var migrationCreateTranscode = gormigrate.Migration{
ID: "202003111222",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
TranscodePreference{},
).
Error
},
func migrateCreateTranscode() gormigrate.Migration {
return gormigrate.Migration{
ID: "202003111222",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
TranscodePreference{},
).
Error
},
}
}
var migrationAddGenre = gormigrate.Migration{
ID: "202003121330",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
Genre{},
Album{},
Track{},
).
Error
},
func migrateAddGenre() gormigrate.Migration {
return gormigrate.Migration{
ID: "202003121330",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
Genre{},
Album{},
Track{},
).
Error
},
}
}
var migrationUpdateTranscodePrefIDX = gormigrate.Migration{
ID: "202003241509",
Migrate: func(tx *gorm.DB) error {
var hasIDX int
tx.
Select("1").
Table("sqlite_master").
Where("type = ?", "index").
Where("name = ?", "idx_user_id_client").
Count(&hasIDX)
if hasIDX == 1 {
// index already exists
return nil
}
step := tx.Exec(`
func migrateUpdateTranscodePrefIDX() gormigrate.Migration {
return gormigrate.Migration{
ID: "202003241509",
Migrate: func(tx *gorm.DB) error {
var hasIDX int
tx.
Select("1").
Table("sqlite_master").
Where("type = ?", "index").
Where("name = ?", "idx_user_id_client").
Count(&hasIDX)
if hasIDX == 1 {
// index already exists
return nil
}
step := tx.Exec(`
ALTER TABLE transcode_preferences RENAME TO transcode_preferences_orig;
`)
if err := step.Error; err != nil {
return fmt.Errorf("step rename: %w", err)
}
step = tx.AutoMigrate(
TranscodePreference{},
)
if err := step.Error; err != nil {
return fmt.Errorf("step create: %w", err)
}
step = tx.Exec(`
if err := step.Error; err != nil {
return fmt.Errorf("step rename: %w", err)
}
step = tx.AutoMigrate(
TranscodePreference{},
)
if err := step.Error; err != nil {
return fmt.Errorf("step create: %w", err)
}
step = tx.Exec(`
INSERT INTO transcode_preferences (user_id, client, profile)
SELECT user_id, client, profile
FROM transcode_preferences_orig;
DROP TABLE transcode_preferences_orig;
`)
if err := step.Error; err != nil {
return fmt.Errorf("step copy: %w", err)
}
return nil
},
if err := step.Error; err != nil {
return fmt.Errorf("step copy: %w", err)
}
return nil
},
}
}
var migrationAddAlbumIDX = gormigrate.Migration{
ID: "202004302006",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
Album{},
).
Error
},
func migrateAddAlbumIDX() gormigrate.Migration {
return gormigrate.Migration{
ID: "202004302006",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
Album{},
).
Error
},
}
}

View File

@@ -94,8 +94,8 @@ func (t *Track) Ext() string {
}
func (t *Track) MIME() string {
ext := t.Ext()
return mime.Types[ext]
v, _ := mime.FromExtension(t.Ext())
return v
}
func (t *Track) RelPath() string {