Refactor App to use DI

This commit is contained in:
Deluan 2020-01-11 13:00:03 -05:00 committed by Deluan Quintão
parent 30ebbc1fa1
commit 408030eb6c
4 changed files with 28 additions and 25 deletions

10
app.go
View File

@ -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)
}
}
}

View File

@ -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)
}

View File

@ -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)

View File

@ -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))
}