Simplify persistence injection

This commit is contained in:
Deluan
2020-01-15 17:51:17 -05:00
parent 36d93774bc
commit a659c3b7c4
2 changed files with 18 additions and 90 deletions
+17 -62
View File
@@ -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
View File
@@ -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), "*"),
))
}