11package com.hoc.comicapp.koin
22
3- import android.app.Application
4- import android.content.Context
5- import androidx.work.WorkManager
6- import com.google.firebase.auth.FirebaseAuth
7- import com.google.firebase.firestore.FirebaseFirestore
8- import com.google.firebase.storage.FirebaseStorage
93import com.hoc.comicapp.data.ErrorMapper
10- import com.hoc.comicapp.data.JsonAdaptersContainer
114import com.hoc.comicapp.data.analytics.AnalyticsServiceImpl
125import com.hoc.comicapp.data.firebase.favorite_comics.FavoriteComicsDataSource
136import com.hoc.comicapp.data.firebase.favorite_comics.FavoriteComicsDataSourceImpl
147import com.hoc.comicapp.data.firebase.user.FirebaseAuthUserDataSource
158import com.hoc.comicapp.data.firebase.user.FirebaseAuthUserDataSourceImpl
169import com.hoc.comicapp.data.local.AppDatabase
17- import com.hoc.comicapp.data.local.dao.ChapterDao
18- import com.hoc.comicapp.data.local.dao.ComicDao
19- import com.hoc.comicapp.data.remote.ComicApiService
2010import com.hoc.comicapp.data.repository.ComicRepositoryImpl
2111import com.hoc.comicapp.data.repository.DownloadComicsRepositoryImpl
2212import com.hoc.comicapp.data.repository.FavoriteComicsRepositoryImpl
@@ -26,212 +16,50 @@ import com.hoc.comicapp.domain.repository.ComicRepository
2616import com.hoc.comicapp.domain.repository.DownloadComicsRepository
2717import com.hoc.comicapp.domain.repository.FavoriteComicsRepository
2818import com.hoc.comicapp.domain.repository.UserRepository
29- import com.hoc.comicapp.domain.thread.CoroutinesDispatchersProvider
30- import com.hoc.comicapp.domain.thread.RxSchedulerProvider
31- import kotlinx.coroutines.CoroutineScope
32- import org.koin.android.ext.koin.androidApplication
3319import org.koin.android.ext.koin.androidContext
20+ import org.koin.core.module.dsl.bind
21+ import org.koin.core.module.dsl.singleOf
3422import org.koin.dsl.module
35- import retrofit2.Retrofit
3623
3724val dataModule = module {
3825 /*
3926 * FavoriteComicsRepository + ComicRepository + DownloadComicsRepository
4027 */
4128
42- single { provideFavoriteComicsRepository(get(), get()) }
43-
44- single {
45- provideComicRepository(
46- errorMapper = get(),
47- comicApiService = get(),
48- dispatchersProvider = get(),
49- favoriteComicsDataSource = get(),
50- comicDao = get(),
51- appCoroutineScope = get(),
52- analyticsService = get(),
53- )
54- }
55-
56- single {
57- provideDownloadComicsRepository(
58- application = androidApplication(),
59- comicApiService = get(),
60- dispatchersProvider = get(),
61- comicDao = get(),
62- chapterDao = get(),
63- appDatabase = get(),
64- rxSchedulerProvider = get(),
65- errorMapper = get(),
66- workManager = get(),
67- jsonAdaptersContainer = get(),
68- analyticsService = get(),
69- )
70- }
71-
72- single { provideUserRepository(get(), get()) }
29+ singleOf(::FavoriteComicsRepositoryImpl ) { bind<FavoriteComicsRepository >() }
30+
31+ singleOf(::ComicRepositoryImpl ) { bind<ComicRepository >() }
32+
33+ singleOf(::DownloadComicsRepositoryImpl ) { bind<DownloadComicsRepository >() }
34+
35+ singleOf(::UserRepositoryImpl ) { bind<UserRepository >() }
7336
7437 /*
7538 * AppDatabase + Dao
7639 */
7740
78- single { provideAppDatabase (androidContext()) }
41+ single { AppDatabase .getInstance (androidContext()) }
7942
80- single { provideChapterDao( get() ) }
43+ single { get< AppDatabase >().chapterDao( ) }
8144
82- single { provideComicDao( get() ) }
45+ single { get< AppDatabase >().comicDao( ) }
8346
8447 /*
8548 * Firebase data source
8649 */
8750
88- single {
89- provideFirebaseAuthUserDataSource(
90- get(),
91- get(),
92- get(),
93- get(),
94- get(),
95- )
96- }
97-
98- single {
99- provideFavoriteComicsDataSource(
100- get(),
101- get(),
102- get(),
103- get(),
104- get(),
105- get(),
106- )
107- }
51+ singleOf(::FirebaseAuthUserDataSourceImpl ) { bind<FirebaseAuthUserDataSource >() }
52+
53+ singleOf(::FavoriteComicsDataSourceImpl ) { bind<FavoriteComicsDataSource >() }
10854
10955 /*
11056 * ErrorMapper
11157 */
11258
113- single { provideErrorMapper(get()) }
59+ singleOf(:: ErrorMapper )
11460
11561 /*
11662 * Analytics
11763 */
118- single<AnalyticsService > { AnalyticsServiceImpl () }
119- }
120-
121- private fun provideFavoriteComicsRepository (
122- errorMapper : ErrorMapper ,
123- favoriteComicsDataSource : FavoriteComicsDataSource ,
124- ): FavoriteComicsRepository {
125- return FavoriteComicsRepositoryImpl (
126- errorMapper = errorMapper,
127- favoriteComicsDataSource = favoriteComicsDataSource,
128- )
129- }
130-
131- private fun provideComicRepository (
132- errorMapper : ErrorMapper ,
133- comicApiService : ComicApiService ,
134- dispatchersProvider : CoroutinesDispatchersProvider ,
135- favoriteComicsDataSource : FavoriteComicsDataSource ,
136- comicDao : ComicDao ,
137- appCoroutineScope : CoroutineScope ,
138- analyticsService : AnalyticsService ,
139- ): ComicRepository {
140- return ComicRepositoryImpl (
141- errorMapper = errorMapper,
142- comicApiService = comicApiService,
143- dispatchersProvider = dispatchersProvider,
144- favoriteComicsDataSource = favoriteComicsDataSource,
145- comicDao = comicDao,
146- appCoroutineScope = appCoroutineScope,
147- analyticsService = analyticsService
148- )
149- }
150-
151- private fun provideDownloadComicsRepository (
152- application : Application ,
153- comicApiService : ComicApiService ,
154- dispatchersProvider : CoroutinesDispatchersProvider ,
155- comicDao : ComicDao ,
156- chapterDao : ChapterDao ,
157- appDatabase : AppDatabase ,
158- rxSchedulerProvider : RxSchedulerProvider ,
159- errorMapper : ErrorMapper ,
160- workManager : WorkManager ,
161- jsonAdaptersContainer : JsonAdaptersContainer ,
162- analyticsService : AnalyticsService ,
163- ): DownloadComicsRepository {
164- return DownloadComicsRepositoryImpl (
165- comicApiService = comicApiService,
166- application = application,
167- dispatchersProvider = dispatchersProvider,
168- comicDao = comicDao,
169- chapterDao = chapterDao,
170- appDatabase = appDatabase,
171- rxSchedulerProvider = rxSchedulerProvider,
172- errorMapper = errorMapper,
173- workManager = workManager,
174- jsonAdaptersContainer = jsonAdaptersContainer,
175- analyticsService = analyticsService,
176- )
177- }
178-
179- private fun provideUserRepository (
180- errorMapper : ErrorMapper ,
181- userDataSource : FirebaseAuthUserDataSource ,
182- ): UserRepository {
183- return UserRepositoryImpl (
184- errorMapper = errorMapper,
185- userDataSource = userDataSource,
186- )
187- }
188-
189- private fun provideAppDatabase (context : Context ): AppDatabase {
190- return AppDatabase .getInstance(context)
191- }
192-
193- private fun provideChapterDao (appDatabase : AppDatabase ): ChapterDao {
194- return appDatabase.chapterDao()
195- }
196-
197- private fun provideComicDao (appDatabase : AppDatabase ): ComicDao {
198- return appDatabase.comicDao()
199- }
200-
201- private fun provideFirebaseAuthUserDataSource (
202- firebaseAuth : FirebaseAuth ,
203- firebaseStorage : FirebaseStorage ,
204- firebaseFirestore : FirebaseFirestore ,
205- rxSchedulerProvider : RxSchedulerProvider ,
206- dispatchersProvider : CoroutinesDispatchersProvider ,
207- ): FirebaseAuthUserDataSource {
208- return FirebaseAuthUserDataSourceImpl (
209- firebaseAuth = firebaseAuth,
210- firebaseStorage = firebaseStorage,
211- firebaseFirestore = firebaseFirestore,
212- rxSchedulerProvider = rxSchedulerProvider,
213- dispatchersProvider = dispatchersProvider,
214- )
215- }
216-
217- private fun provideFavoriteComicsDataSource (
218- firebaseAuth : FirebaseAuth ,
219- firebaseFirestore : FirebaseFirestore ,
220- rxSchedulerProvider : RxSchedulerProvider ,
221- dispatchersProvider : CoroutinesDispatchersProvider ,
222- firebaseAuthUserDataSource : FirebaseAuthUserDataSource ,
223- appCoroutineScope : CoroutineScope ,
224- ): FavoriteComicsDataSource {
225- return FavoriteComicsDataSourceImpl (
226- firebaseAuth = firebaseAuth,
227- firebaseFirestore = firebaseFirestore,
228- rxSchedulerProvider = rxSchedulerProvider,
229- dispatchersProvider = dispatchersProvider,
230- firebaseAuthUserDataSource = firebaseAuthUserDataSource,
231- appCoroutineScope = appCoroutineScope,
232- )
233- }
234-
235- private fun provideErrorMapper (retrofit : Retrofit ): ErrorMapper {
236- return ErrorMapper (retrofit)
64+ singleOf(::AnalyticsServiceImpl ) { bind<AnalyticsService >() }
23765}
0 commit comments