Skip to content

Commit b51a3fd

Browse files
committed
[SHARED] Refactor shared domain and remove Mapper interface
1 parent cbf700c commit b51a3fd

File tree

11 files changed

+34
-51
lines changed

11 files changed

+34
-51
lines changed
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
package me.moallemi.kmpshowcase.shared.di
22

3+
import io.ktor.client.engine.okhttp.OkHttp
34
import org.koin.core.module.Module
5+
import org.koin.dsl.KoinAppDeclaration
46
import org.koin.dsl.module
57

6-
actual val platformModule: Module = module {
8+
fun initKoinAndroid(appDeclaration: KoinAppDeclaration) = initKoin {
9+
appDeclaration()
10+
}
711

12+
actual val platformModule: Module = module {
13+
single {
14+
OkHttp.create()
15+
}
816
}

shared/src/commonMain/kotlin/me/moallemi/kmpshowcase/shared/Greeting.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.

shared/src/commonMain/kotlin/me/moallemi/kmpshowcase/shared/di/globalDomain.kt

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,17 @@ package me.moallemi.kmpshowcase.shared.di
22

33
import me.moallemi.kmpshowcase.shared.domain.mapper.AppDtoToApp
44
import me.moallemi.kmpshowcase.shared.domain.mapper.LinksDtoToLinks
5-
import me.moallemi.kmpshowcase.shared.domain.mapper.Mapper
6-
import me.moallemi.kmpshowcase.shared.domain.model.App
7-
import me.moallemi.kmpshowcase.shared.domain.model.Links
8-
import me.moallemi.kmpshowcase.shared.network.response.AppDto
9-
import me.moallemi.kmpshowcase.shared.network.response.LinksDto
105
import me.moallemi.kmpshowcase.shared.repository.AppRepository
11-
import org.koin.core.qualifier.named
126
import org.koin.dsl.module
137

148
internal val domainModule = module {
15-
single<Mapper<LinksDto?, Links?>>(
16-
named(QUALIFIER_NAME_MAPPER_LINKSDTO_TOLINKS)
17-
) {
9+
single {
1810
LinksDtoToLinks()
1911
}
20-
single<Mapper<AppDto, App>>(
21-
named(QUALIFIER_NAME_MAPPER_APPDTO_TO_APP)
22-
) {
23-
AppDtoToApp(
24-
get(named(QUALIFIER_NAME_MAPPER_LINKSDTO_TOLINKS))
25-
)
12+
single {
13+
AppDtoToApp(get())
2614
}
2715
single {
28-
AppRepository(
29-
get(),
30-
get(named(QUALIFIER_NAME_MAPPER_APPDTO_TO_APP))
31-
)
16+
AppRepository(get(), get())
3217
}
3318
}
Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package me.moallemi.kmpshowcase.shared.di
22

3-
import me.moallemi.kmpshowcase.shared.presentation.AppListViewModel
43
import org.koin.core.context.startKoin
54
import org.koin.core.module.Module
65
import org.koin.dsl.KoinAppDeclaration
7-
import org.koin.dsl.module
86

9-
fun initKoin(appDeclaration: KoinAppDeclaration = {}) = startKoin {
7+
internal fun initKoin(appDeclaration: KoinAppDeclaration = {}) = startKoin {
108
appDeclaration()
119
modules(
1210
networkModule,
@@ -15,12 +13,4 @@ fun initKoin(appDeclaration: KoinAppDeclaration = {}) = startKoin {
1513
)
1614
}
1715

18-
fun initKoin() = initKoin {
19-
modules(
20-
module {
21-
factory { AppListViewModel(get()) }
22-
}
23-
)
24-
}
25-
2616
expect val platformModule: Module

shared/src/commonMain/kotlin/me/moallemi/kmpshowcase/shared/di/network.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import me.moallemi.kmpshowcase.shared.utils.log as kmpLog
1313

1414
internal val networkModule = module {
1515
single {
16-
HttpClient {
16+
HttpClient(this@single.get()) {
1717
install(JsonFeature) {
1818
serializer = KotlinxSerializer(this@single.get())
1919
}

shared/src/iosMain/kotlin/me/moallemi/kmpshowcase/shared/di/viewModels.kt renamed to shared/src/commonMain/kotlin/me/moallemi/kmpshowcase/shared/di/viewModels.kt

File renamed without changes.

shared/src/commonMain/kotlin/me/moallemi/kmpshowcase/shared/domain/mapper/AppDtoToApp.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package me.moallemi.kmpshowcase.shared.domain.mapper
22

33
import me.moallemi.kmpshowcase.shared.domain.model.App
4-
import me.moallemi.kmpshowcase.shared.domain.model.Links
54
import me.moallemi.kmpshowcase.shared.network.response.AppDto
6-
import me.moallemi.kmpshowcase.shared.network.response.LinksDto
75

8-
internal class AppDtoToApp(
9-
private val linksDtoToLinks: Mapper<LinksDto?, Links?>,
10-
) : Mapper<AppDto, App> {
6+
class AppDtoToApp(
7+
private val linksDtoToLinks: LinksDtoToLinks,
8+
) {
119

12-
override fun map(from: AppDto) = with(from) {
10+
fun map(from: AppDto) = with(from) {
1311
App(
1412
id = name,
1513
name = name,

shared/src/commonMain/kotlin/me/moallemi/kmpshowcase/shared/domain/mapper/LinksDtoToLinks.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package me.moallemi.kmpshowcase.shared.domain.mapper
33
import me.moallemi.kmpshowcase.shared.domain.model.Links
44
import me.moallemi.kmpshowcase.shared.network.response.LinksDto
55

6-
internal class LinksDtoToLinks : Mapper<LinksDto?, Links?> {
6+
class LinksDtoToLinks {
77

8-
override fun map(from: LinksDto?) = from?.let { linksDto ->
8+
fun map(from: LinksDto?) = from?.let { linksDto ->
99
Links(
1010
appStore = linksDto.appStore,
1111
googlePlay = linksDto.googlePlay,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package me.moallemi.kmpshowcase.shared.domain.mapper
22

3+
// FIXME due to inconsistency we can not use generic interfaces with Koin
4+
// https://github.com/InsertKoinIO/koin/issues/75#issuecomment-474405908
35
interface Mapper<in F, out T> {
46
fun map(from: F): T
57
}

shared/src/commonMain/kotlin/me/moallemi/kmpshowcase/shared/repository/AppRepository.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package me.moallemi.kmpshowcase.shared.repository
22

33
import kotlinx.coroutines.flow.Flow
44
import kotlinx.coroutines.flow.flow
5+
import me.moallemi.kmpshowcase.shared.domain.mapper.AppDtoToApp
56
import me.moallemi.kmpshowcase.shared.domain.mapper.Mapper
67
import me.moallemi.kmpshowcase.shared.domain.model.App
78
import me.moallemi.kmpshowcase.shared.network.api.KmpShowcaseApi
89
import me.moallemi.kmpshowcase.shared.network.response.AppDto
910

1011
class AppRepository(
1112
private val kmpShowcaseApi: KmpShowcaseApi,
12-
private val appDtoToApp: Mapper<AppDto, App>,
13+
private val appDtoToApp: AppDtoToApp,
1314
) {
1415
fun getAllAppsAsFlow(): Flow<List<App>> = flow {
1516
kmpShowcaseApi.getApps()

0 commit comments

Comments
 (0)