Move API dependency injection to main package, opening the possibility to switch persistence without code changes

This commit is contained in:
Deluan
2020-01-11 12:37:05 -05:00
committed by Deluan Quintão
parent 52f682debf
commit 30ebbc1fa1
6 changed files with 92 additions and 72 deletions
+25 -1
View File
@@ -6,8 +6,10 @@
package main
import (
"github.com/cloudsonic/sonic-server/api"
"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"
@@ -18,6 +20,28 @@ import (
// Injectors from wire_injectors.go:
func initRouter() *api.Router {
propertyRepository := db_storm.NewPropertyRepository()
mediaFolderRepository := persistence.NewMediaFolderRepository()
artistIndexRepository := db_storm.NewArtistIndexRepository()
artistRepository := db_storm.NewArtistRepository()
albumRepository := db_storm.NewAlbumRepository()
mediaFileRepository := db_storm.NewMediaFileRepository()
browser := engine.NewBrowser(propertyRepository, mediaFolderRepository, artistIndexRepository, artistRepository, albumRepository, mediaFileRepository)
cover := engine.NewCover(mediaFileRepository, albumRepository)
nowPlayingRepository := persistence.NewNowPlayingRepository()
listGenerator := engine.NewListGenerator(albumRepository, mediaFileRepository, nowPlayingRepository)
itunesControl := itunesbridge.NewItunesControl()
playlistRepository := db_storm.NewPlaylistRepository()
playlists := engine.NewPlaylists(itunesControl, playlistRepository, mediaFileRepository)
ratings := engine.NewRatings(itunesControl, mediaFileRepository, albumRepository, artistRepository)
scrobbler := engine.NewScrobbler(itunesControl, mediaFileRepository, nowPlayingRepository)
db := newDB()
search := engine.NewSearch(artistRepository, albumRepository, mediaFileRepository, db)
router := api.NewRouter(browser, cover, listGenerator, playlists, ratings, scrobbler, search, mediaFileRepository)
return router
}
func initImporter(musicFolder string) *scanner.Importer {
checkSumRepository := db_storm.NewCheckSumRepository()
itunesScanner := scanner.NewItunesScanner(checkSumRepository)
@@ -35,7 +59,7 @@ func initImporter(musicFolder string) *scanner.Importer {
// wire_injectors.go:
var allProviders = wire.NewSet(itunesbridge.NewItunesControl, db_storm.Set, engine.Set, scanner.Set, newDB)
var allProviders = wire.NewSet(itunesbridge.NewItunesControl, db_storm.Set, engine.Set, scanner.Set, newDB, api.NewRouter)
func newDB() gomate.DB {
return ledis.NewEmbeddedDB(db_ledis.Db())