Simplify persistence injection
This commit is contained in:
+17
-62
@@ -9,7 +9,6 @@ import (
|
|||||||
"github.com/cloudsonic/sonic-server/api"
|
"github.com/cloudsonic/sonic-server/api"
|
||||||
"github.com/cloudsonic/sonic-server/engine"
|
"github.com/cloudsonic/sonic-server/engine"
|
||||||
"github.com/cloudsonic/sonic-server/itunesbridge"
|
"github.com/cloudsonic/sonic-server/itunesbridge"
|
||||||
"github.com/cloudsonic/sonic-server/model"
|
|
||||||
"github.com/cloudsonic/sonic-server/persistence"
|
"github.com/cloudsonic/sonic-server/persistence"
|
||||||
"github.com/cloudsonic/sonic-server/scanner_legacy"
|
"github.com/cloudsonic/sonic-server/scanner_legacy"
|
||||||
"github.com/cloudsonic/sonic-server/server"
|
"github.com/cloudsonic/sonic-server/server"
|
||||||
@@ -19,35 +18,33 @@ import (
|
|||||||
// Injectors from wire_injectors.go:
|
// Injectors from wire_injectors.go:
|
||||||
|
|
||||||
func CreateApp(musicFolder string) *server.Server {
|
func CreateApp(musicFolder string) *server.Server {
|
||||||
repositories := createPersistenceProvider()
|
checksumRepository := persistence.NewCheckSumRepository()
|
||||||
checksumRepository := repositories.CheckSumRepository
|
|
||||||
itunesScanner := scanner_legacy.NewItunesScanner(checksumRepository)
|
itunesScanner := scanner_legacy.NewItunesScanner(checksumRepository)
|
||||||
mediaFileRepository := repositories.MediaFileRepository
|
mediaFileRepository := persistence.NewMediaFileRepository()
|
||||||
albumRepository := repositories.AlbumRepository
|
albumRepository := persistence.NewAlbumRepository()
|
||||||
artistRepository := repositories.ArtistRepository
|
artistRepository := persistence.NewArtistRepository()
|
||||||
artistIndexRepository := repositories.ArtistIndexRepository
|
artistIndexRepository := persistence.NewArtistIndexRepository()
|
||||||
playlistRepository := repositories.PlaylistRepository
|
playlistRepository := persistence.NewPlaylistRepository()
|
||||||
propertyRepository := repositories.PropertyRepository
|
propertyRepository := persistence.NewPropertyRepository()
|
||||||
importer := scanner_legacy.NewImporter(musicFolder, itunesScanner, mediaFileRepository, albumRepository, artistRepository, artistIndexRepository, playlistRepository, propertyRepository)
|
importer := scanner_legacy.NewImporter(musicFolder, itunesScanner, mediaFileRepository, albumRepository, artistRepository, artistIndexRepository, playlistRepository, propertyRepository)
|
||||||
serverServer := server.New(importer)
|
serverServer := server.New(importer)
|
||||||
return serverServer
|
return serverServer
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateSubsonicAPIRouter() *api.Router {
|
func CreateSubsonicAPIRouter() *api.Router {
|
||||||
repositories := createPersistenceProvider()
|
propertyRepository := persistence.NewPropertyRepository()
|
||||||
propertyRepository := repositories.PropertyRepository
|
mediaFolderRepository := persistence.NewMediaFolderRepository()
|
||||||
mediaFolderRepository := repositories.MediaFolderRepository
|
artistIndexRepository := persistence.NewArtistIndexRepository()
|
||||||
artistIndexRepository := repositories.ArtistIndexRepository
|
artistRepository := persistence.NewArtistRepository()
|
||||||
artistRepository := repositories.ArtistRepository
|
albumRepository := persistence.NewAlbumRepository()
|
||||||
albumRepository := repositories.AlbumRepository
|
mediaFileRepository := persistence.NewMediaFileRepository()
|
||||||
mediaFileRepository := repositories.MediaFileRepository
|
genreRepository := persistence.NewGenreRepository()
|
||||||
genreRepository := repositories.GenreRepository
|
|
||||||
browser := engine.NewBrowser(propertyRepository, mediaFolderRepository, artistIndexRepository, artistRepository, albumRepository, mediaFileRepository, genreRepository)
|
browser := engine.NewBrowser(propertyRepository, mediaFolderRepository, artistIndexRepository, artistRepository, albumRepository, mediaFileRepository, genreRepository)
|
||||||
cover := engine.NewCover(mediaFileRepository, albumRepository)
|
cover := engine.NewCover(mediaFileRepository, albumRepository)
|
||||||
nowPlayingRepository := repositories.NowPlayingRepository
|
nowPlayingRepository := persistence.NewNowPlayingRepository()
|
||||||
listGenerator := engine.NewListGenerator(albumRepository, mediaFileRepository, nowPlayingRepository)
|
listGenerator := engine.NewListGenerator(albumRepository, mediaFileRepository, nowPlayingRepository)
|
||||||
itunesControl := itunesbridge.NewItunesControl()
|
itunesControl := itunesbridge.NewItunesControl()
|
||||||
playlistRepository := repositories.PlaylistRepository
|
playlistRepository := persistence.NewPlaylistRepository()
|
||||||
playlists := engine.NewPlaylists(itunesControl, playlistRepository, mediaFileRepository)
|
playlists := engine.NewPlaylists(itunesControl, playlistRepository, mediaFileRepository)
|
||||||
ratings := engine.NewRatings(itunesControl, mediaFileRepository, albumRepository, artistRepository)
|
ratings := engine.NewRatings(itunesControl, mediaFileRepository, albumRepository, artistRepository)
|
||||||
scrobbler := engine.NewScrobbler(itunesControl, mediaFileRepository, nowPlayingRepository)
|
scrobbler := engine.NewScrobbler(itunesControl, mediaFileRepository, nowPlayingRepository)
|
||||||
@@ -56,48 +53,6 @@ func CreateSubsonicAPIRouter() *api.Router {
|
|||||||
return router
|
return router
|
||||||
}
|
}
|
||||||
|
|
||||||
func createPersistenceProvider() *Repositories {
|
|
||||||
albumRepository := persistence.NewAlbumRepository()
|
|
||||||
artistRepository := persistence.NewArtistRepository()
|
|
||||||
checksumRepository := persistence.NewCheckSumRepository()
|
|
||||||
artistIndexRepository := persistence.NewArtistIndexRepository()
|
|
||||||
mediaFileRepository := persistence.NewMediaFileRepository()
|
|
||||||
mediaFolderRepository := persistence.NewMediaFolderRepository()
|
|
||||||
nowPlayingRepository := persistence.NewNowPlayingRepository()
|
|
||||||
playlistRepository := persistence.NewPlaylistRepository()
|
|
||||||
propertyRepository := persistence.NewPropertyRepository()
|
|
||||||
genreRepository := persistence.NewGenreRepository()
|
|
||||||
repositories := &Repositories{
|
|
||||||
AlbumRepository: albumRepository,
|
|
||||||
ArtistRepository: artistRepository,
|
|
||||||
CheckSumRepository: checksumRepository,
|
|
||||||
ArtistIndexRepository: artistIndexRepository,
|
|
||||||
MediaFileRepository: mediaFileRepository,
|
|
||||||
MediaFolderRepository: mediaFolderRepository,
|
|
||||||
NowPlayingRepository: nowPlayingRepository,
|
|
||||||
PlaylistRepository: playlistRepository,
|
|
||||||
PropertyRepository: propertyRepository,
|
|
||||||
GenreRepository: genreRepository,
|
|
||||||
}
|
|
||||||
return repositories
|
|
||||||
}
|
|
||||||
|
|
||||||
// wire_injectors.go:
|
// wire_injectors.go:
|
||||||
|
|
||||||
type Repositories struct {
|
var allProviders = wire.NewSet(itunesbridge.NewItunesControl, engine.Set, scanner_legacy.Set, api.NewRouter, persistence.Set)
|
||||||
AlbumRepository model.AlbumRepository
|
|
||||||
ArtistRepository model.ArtistRepository
|
|
||||||
CheckSumRepository model.ChecksumRepository
|
|
||||||
ArtistIndexRepository model.ArtistIndexRepository
|
|
||||||
MediaFileRepository model.MediaFileRepository
|
|
||||||
MediaFolderRepository model.MediaFolderRepository
|
|
||||||
NowPlayingRepository model.NowPlayingRepository
|
|
||||||
PlaylistRepository model.PlaylistRepository
|
|
||||||
PropertyRepository model.PropertyRepository
|
|
||||||
GenreRepository model.GenreRepository
|
|
||||||
}
|
|
||||||
|
|
||||||
var allProviders = wire.NewSet(itunesbridge.NewItunesControl, engine.Set, scanner_legacy.Set, api.NewRouter, wire.FieldsOf(new(*Repositories), "AlbumRepository", "ArtistRepository", "CheckSumRepository",
|
|
||||||
"ArtistIndexRepository", "MediaFileRepository", "MediaFolderRepository", "NowPlayingRepository",
|
|
||||||
"PlaylistRepository", "PropertyRepository", "GenreRepository"), createPersistenceProvider,
|
|
||||||
)
|
|
||||||
|
|||||||
+1
-28
@@ -6,36 +6,18 @@ import (
|
|||||||
"github.com/cloudsonic/sonic-server/api"
|
"github.com/cloudsonic/sonic-server/api"
|
||||||
"github.com/cloudsonic/sonic-server/engine"
|
"github.com/cloudsonic/sonic-server/engine"
|
||||||
"github.com/cloudsonic/sonic-server/itunesbridge"
|
"github.com/cloudsonic/sonic-server/itunesbridge"
|
||||||
"github.com/cloudsonic/sonic-server/model"
|
|
||||||
"github.com/cloudsonic/sonic-server/persistence"
|
"github.com/cloudsonic/sonic-server/persistence"
|
||||||
"github.com/cloudsonic/sonic-server/scanner_legacy"
|
"github.com/cloudsonic/sonic-server/scanner_legacy"
|
||||||
"github.com/cloudsonic/sonic-server/server"
|
"github.com/cloudsonic/sonic-server/server"
|
||||||
"github.com/google/wire"
|
"github.com/google/wire"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO Can we remove this indirection?
|
|
||||||
type Repositories struct {
|
|
||||||
AlbumRepository model.AlbumRepository
|
|
||||||
ArtistRepository model.ArtistRepository
|
|
||||||
CheckSumRepository model.ChecksumRepository
|
|
||||||
ArtistIndexRepository model.ArtistIndexRepository
|
|
||||||
MediaFileRepository model.MediaFileRepository
|
|
||||||
MediaFolderRepository model.MediaFolderRepository
|
|
||||||
NowPlayingRepository model.NowPlayingRepository
|
|
||||||
PlaylistRepository model.PlaylistRepository
|
|
||||||
PropertyRepository model.PropertyRepository
|
|
||||||
GenreRepository model.GenreRepository
|
|
||||||
}
|
|
||||||
|
|
||||||
var allProviders = wire.NewSet(
|
var allProviders = wire.NewSet(
|
||||||
itunesbridge.NewItunesControl,
|
itunesbridge.NewItunesControl,
|
||||||
engine.Set,
|
engine.Set,
|
||||||
scanner_legacy.Set,
|
scanner_legacy.Set,
|
||||||
api.NewRouter,
|
api.NewRouter,
|
||||||
wire.FieldsOf(new(*Repositories), "AlbumRepository", "ArtistRepository", "CheckSumRepository",
|
persistence.Set,
|
||||||
"ArtistIndexRepository", "MediaFileRepository", "MediaFolderRepository", "NowPlayingRepository",
|
|
||||||
"PlaylistRepository", "PropertyRepository", "GenreRepository"),
|
|
||||||
createPersistenceProvider,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func CreateApp(musicFolder string) *server.Server {
|
func CreateApp(musicFolder string) *server.Server {
|
||||||
@@ -48,12 +30,3 @@ func CreateApp(musicFolder string) *server.Server {
|
|||||||
func CreateSubsonicAPIRouter() *api.Router {
|
func CreateSubsonicAPIRouter() *api.Router {
|
||||||
panic(wire.Build(allProviders))
|
panic(wire.Build(allProviders))
|
||||||
}
|
}
|
||||||
|
|
||||||
// When implementing a different persistence layer, duplicate this function (in separated files) and use build tags
|
|
||||||
// to conditionally select which function to use
|
|
||||||
func createPersistenceProvider() *Repositories {
|
|
||||||
panic(wire.Build(
|
|
||||||
persistence.Set,
|
|
||||||
wire.Struct(new(Repositories), "*"),
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user