Skip to content

Commit

Permalink
Inject DB into DataStore, instead of hardcode the dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
deluan committed Aug 1, 2021
1 parent c0fc36d commit 344d7a4
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 22 deletions.
18 changes: 12 additions & 6 deletions cmd/wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions cmd/wire_injectors.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ package cmd
import (
"sync"

"github.com/navidrome/navidrome/server/events"

"github.com/google/wire"
"github.com/navidrome/navidrome/core"
"github.com/navidrome/navidrome/core/agents/lastfm"
"github.com/navidrome/navidrome/db"
"github.com/navidrome/navidrome/persistence"
"github.com/navidrome/navidrome/scanner"
"github.com/navidrome/navidrome/server"
"github.com/navidrome/navidrome/server/events"
"github.com/navidrome/navidrome/server/nativeapi"
"github.com/navidrome/navidrome/server/subsonic"
)
Expand All @@ -24,6 +24,7 @@ var allProviders = wire.NewSet(
persistence.New,
lastfm.NewRouter,
events.GetBroker,
db.Db,
)

func CreateServer(musicFolder string) *server.Server {
Expand Down
15 changes: 5 additions & 10 deletions db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import (
"database/sql"
"fmt"
"os"
"sync"

_ "github.com/mattn/go-sqlite3"
"github.com/navidrome/navidrome/conf"
_ "github.com/navidrome/navidrome/db/migration"
"github.com/navidrome/navidrome/log"
"github.com/navidrome/navidrome/utils/singleton"
"github.com/pressly/goose"
)

Expand All @@ -18,26 +18,21 @@ var (
Path string
)

var (
once sync.Once
db *sql.DB
)

func Db() *sql.DB {
once.Do(func() {
var err error
instance := singleton.Get(&sql.DB{}, func() interface{} {
Path = conf.Server.DbPath
if Path == ":memory:" {
Path = "file::memory:?cache=shared&_foreign_keys=on"
conf.Server.DbPath = Path
}
log.Debug("Opening DataBase", "dbPath", Path, "driver", Driver)
db, err = sql.Open(Driver, Path)
instance, err := sql.Open(Driver, Path)
if err != nil {
panic(err)
}
return instance
})
return db
return instance.(*sql.DB)
}

func EnsureLatestVersion() {
Expand Down
10 changes: 6 additions & 4 deletions persistence/persistence.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package persistence

import (
"context"
"database/sql"
"reflect"

"github.com/astaxie/beego/orm"
Expand All @@ -12,10 +13,11 @@ import (

type SQLStore struct {
orm orm.Ormer
db *sql.DB
}

func New() model.DataStore {
return &SQLStore{}
func New(db *sql.DB) model.DataStore {
return &SQLStore{db: db}
}

func (s *SQLStore) Album(ctx context.Context) model.AlbumRepository {
Expand Down Expand Up @@ -100,7 +102,7 @@ func (s *SQLStore) Resource(ctx context.Context, m interface{}) model.ResourceRe
}

func (s *SQLStore) WithTx(block func(tx model.DataStore) error) error {
o, err := orm.NewOrmWithDB(db.Driver, "default", db.Db())
o, err := orm.NewOrmWithDB(db.Driver, "default", s.db)
if err != nil {
return err
}
Expand Down Expand Up @@ -177,7 +179,7 @@ func (s *SQLStore) GC(ctx context.Context, rootFolder string) error {

func (s *SQLStore) getOrmer() orm.Ormer {
if s.orm == nil {
o, err := orm.NewOrmWithDB(db.Driver, "default", db.Db())
o, err := orm.NewOrmWithDB(db.Driver, "default", s.db)
if err != nil {
log.Error("Error obtaining new orm instance", err)
}
Expand Down

0 comments on commit 344d7a4

Please sign in to comment.