From 408030eb6c55fb89be523d11c1ca1a01282ac1e0 Mon Sep 17 00:00:00 2001 From: Deluan Date: Sat, 11 Jan 2020 13:00:03 -0500 Subject: [PATCH] Refactor App to use DI --- app.go | 10 +++++----- main.go | 3 +-- wire_gen.go | 31 ++++++++++++++++--------------- wire_injectors.go | 9 ++++++--- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/app.go b/app.go index 22890818..5515a05c 100644 --- a/app.go +++ b/app.go @@ -7,7 +7,6 @@ import ( "strings" "time" - "github.com/cloudsonic/sonic-server/conf" "github.com/cloudsonic/sonic-server/log" "github.com/cloudsonic/sonic-server/scanner" "github.com/go-chi/chi" @@ -16,14 +15,16 @@ import ( ) type App struct { + Importer *scanner.Importer router *chi.Mux - importer *scanner.Importer } -func (a *App) Initialize() { +func NewApp(importer *scanner.Importer) *App { + a := &App{Importer: importer} initMimeTypes() a.initRoutes() a.initImporter() + return a } func (a *App) MountRouter(path string, subRouter http.Handler) { @@ -60,7 +61,6 @@ func (a *App) initRoutes() { } func (a *App) initImporter() { - a.importer = initImporter(conf.Sonic.MusicFolder) go a.startPeriodicScans() } @@ -68,7 +68,7 @@ func (a *App) startPeriodicScans() { for { select { case <-time.After(5 * time.Second): - a.importer.CheckForUpdates(false) + a.Importer.CheckForUpdates(false) } } } diff --git a/main.go b/main.go index 78f0894e..3ab9510e 100644 --- a/main.go +++ b/main.go @@ -11,8 +11,7 @@ func main() { fmt.Printf("\nCloudSonic Server v%s\n\n", "0.2") - a := App{} - a.Initialize() + a := createApp(conf.Sonic.MusicFolder) a.MountRouter("/rest/", initRouter().Routes()) a.Run(":" + conf.Sonic.Port) } diff --git a/wire_gen.go b/wire_gen.go index 5a19e325..8763e702 100644 --- a/wire_gen.go +++ b/wire_gen.go @@ -20,6 +20,22 @@ import ( // Injectors from wire_injectors.go: +func createApp(musicFolder string) *App { + checkSumRepository := db_storm.NewCheckSumRepository() + itunesScanner := scanner.NewItunesScanner(checkSumRepository) + mediaFileRepository := db_storm.NewMediaFileRepository() + albumRepository := db_storm.NewAlbumRepository() + artistRepository := db_storm.NewArtistRepository() + artistIndexRepository := db_storm.NewArtistIndexRepository() + playlistRepository := db_storm.NewPlaylistRepository() + propertyRepository := db_storm.NewPropertyRepository() + db := newDB() + search := engine.NewSearch(artistRepository, albumRepository, mediaFileRepository, db) + importer := scanner.NewImporter(musicFolder, itunesScanner, mediaFileRepository, albumRepository, artistRepository, artistIndexRepository, playlistRepository, propertyRepository, search) + app := NewApp(importer) + return app +} + func initRouter() *api.Router { propertyRepository := db_storm.NewPropertyRepository() mediaFolderRepository := persistence.NewMediaFolderRepository() @@ -42,21 +58,6 @@ func initRouter() *api.Router { return router } -func initImporter(musicFolder string) *scanner.Importer { - checkSumRepository := db_storm.NewCheckSumRepository() - itunesScanner := scanner.NewItunesScanner(checkSumRepository) - mediaFileRepository := db_storm.NewMediaFileRepository() - albumRepository := db_storm.NewAlbumRepository() - artistRepository := db_storm.NewArtistRepository() - artistIndexRepository := db_storm.NewArtistIndexRepository() - playlistRepository := db_storm.NewPlaylistRepository() - propertyRepository := db_storm.NewPropertyRepository() - db := newDB() - search := engine.NewSearch(artistRepository, albumRepository, mediaFileRepository, db) - importer := scanner.NewImporter(musicFolder, itunesScanner, mediaFileRepository, albumRepository, artistRepository, artistIndexRepository, playlistRepository, propertyRepository, search) - return importer -} - // wire_injectors.go: var allProviders = wire.NewSet(itunesbridge.NewItunesControl, db_storm.Set, engine.Set, scanner.Set, newDB, api.NewRouter) diff --git a/wire_injectors.go b/wire_injectors.go index 5d95ba8b..d06cf7af 100644 --- a/wire_injectors.go +++ b/wire_injectors.go @@ -24,11 +24,14 @@ var allProviders = wire.NewSet( api.NewRouter, ) -func initRouter() *api.Router { - panic(wire.Build(allProviders)) +func createApp(musicFolder string) *App { + panic(wire.Build( + NewApp, + allProviders, + )) } -func initImporter(musicFolder string) *scanner.Importer { +func initRouter() *api.Router { panic(wire.Build(allProviders)) }