Make persistence provider pluggable at runtime
This commit is contained in:
+43
-4
@@ -4,8 +4,10 @@ package main
|
||||
|
||||
import (
|
||||
"github.com/cloudsonic/sonic-server/api"
|
||||
"github.com/cloudsonic/sonic-server/domain"
|
||||
"github.com/cloudsonic/sonic-server/engine"
|
||||
"github.com/cloudsonic/sonic-server/itunesbridge"
|
||||
"github.com/cloudsonic/sonic-server/persistence"
|
||||
"github.com/cloudsonic/sonic-server/persistence/db_ledis"
|
||||
"github.com/cloudsonic/sonic-server/persistence/db_storm"
|
||||
"github.com/cloudsonic/sonic-server/scanner"
|
||||
@@ -14,27 +16,64 @@ import (
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
type Provider struct {
|
||||
AlbumRepository domain.AlbumRepository
|
||||
ArtistRepository domain.ArtistRepository
|
||||
CheckSumRepository scanner.CheckSumRepository
|
||||
ArtistIndexRepository domain.ArtistIndexRepository
|
||||
MediaFileRepository domain.MediaFileRepository
|
||||
MediaFolderRepository domain.MediaFolderRepository
|
||||
NowPlayingRepository domain.NowPlayingRepository
|
||||
PlaylistRepository domain.PlaylistRepository
|
||||
PropertyRepository domain.PropertyRepository
|
||||
}
|
||||
|
||||
var allProviders = wire.NewSet(
|
||||
itunesbridge.NewItunesControl,
|
||||
//db_ledis.Set,
|
||||
db_storm.Set,
|
||||
engine.Set,
|
||||
scanner.Set,
|
||||
newDB,
|
||||
api.NewRouter,
|
||||
wire.FieldsOf(new(*Provider), "AlbumRepository", "ArtistRepository", "CheckSumRepository",
|
||||
"ArtistIndexRepository", "MediaFileRepository", "MediaFolderRepository", "NowPlayingRepository",
|
||||
"PlaylistRepository", "PropertyRepository"),
|
||||
createPersistenceProvider,
|
||||
)
|
||||
|
||||
func createApp(musicFolder string) *App {
|
||||
func CreateApp(musicFolder string, p persistence.ProviderIdentifier) *App {
|
||||
panic(wire.Build(
|
||||
NewApp,
|
||||
allProviders,
|
||||
))
|
||||
}
|
||||
|
||||
func initRouter() *api.Router {
|
||||
func CreateSubsonicAPIRouter(p persistence.ProviderIdentifier) *api.Router {
|
||||
panic(wire.Build(allProviders))
|
||||
}
|
||||
|
||||
func createPersistenceProvider(provider persistence.ProviderIdentifier) *Provider {
|
||||
switch provider {
|
||||
case "storm":
|
||||
return createStormProvider()
|
||||
default:
|
||||
return createLedisDBProvider()
|
||||
}
|
||||
}
|
||||
|
||||
func createLedisDBProvider() *Provider {
|
||||
panic(wire.Build(
|
||||
db_ledis.Set,
|
||||
wire.Struct(new(Provider), "*"),
|
||||
))
|
||||
}
|
||||
|
||||
func createStormProvider() *Provider {
|
||||
panic(wire.Build(
|
||||
db_storm.Set,
|
||||
wire.Struct(new(Provider), "*"),
|
||||
))
|
||||
}
|
||||
|
||||
func newDB() gomate.DB {
|
||||
return ledis.NewEmbeddedDB(db_ledis.Db())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user