Skip to content

Commit b5aed0d

Browse files
committed
Refactor: remove platform-specific implementation of createApi and centralize JSON configuration
1 parent 5661fa5 commit b5aed0d

File tree

4 files changed

+41
-20
lines changed

4 files changed

+41
-20
lines changed

Fruitties/shared/src/commonMain/kotlin/com/example/fruitties/database/CartDataStore.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ package com.example.fruitties.database
1818
import androidx.datastore.core.DataStoreFactory
1919
import androidx.datastore.core.okio.OkioSerializer
2020
import androidx.datastore.core.okio.OkioStorage
21-
import com.example.fruitties.di.json
2221
import com.example.fruitties.model.Fruittie
22+
import com.example.fruitties.utils.JsonConfig.json
2323
import kotlinx.coroutines.flow.Flow
2424
import kotlinx.serialization.Serializable
2525
import okio.BufferedSink

Fruitties/shared/src/commonMain/kotlin/com/example/fruitties/di/AppContainer.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,21 @@ package com.example.fruitties.di
1818
import androidx.lifecycle.viewmodel.initializer
1919
import androidx.lifecycle.viewmodel.viewModelFactory
2020
import com.example.fruitties.DataRepository
21+
import com.example.fruitties.network.FruittieApi
22+
import com.example.fruitties.network.FruittieNetworkApi
23+
import com.example.fruitties.utils.JsonConfig.json
2124
import com.example.fruitties.viewmodel.CartViewModel
2225
import com.example.fruitties.viewmodel.FruittieViewModel
2326
import com.example.fruitties.viewmodel.FruittieViewModel.Companion.FRUITTIE_ID_KEY
2427
import com.example.fruitties.viewmodel.MainViewModel
28+
import io.ktor.client.HttpClient
29+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
30+
import io.ktor.http.ContentType
31+
import io.ktor.serialization.kotlinx.json.json
2532
import kotlinx.coroutines.CoroutineScope
2633
import kotlinx.coroutines.Dispatchers
2734
import kotlinx.coroutines.SupervisorJob
35+
import kotlinx.serialization.json.Json
2836

2937
class AppContainer(
3038
private val factory: Factory,
@@ -59,4 +67,14 @@ class AppContainer(
5967
)
6068
}
6169
}
70+
71+
internal fun commonCreateApi(): FruittieApi =
72+
FruittieNetworkApi(
73+
client = HttpClient {
74+
install(ContentNegotiation) {
75+
json(json, contentType = ContentType.Any)
76+
}
77+
},
78+
apiUrl = "https://android.github.io/kotlin-multiplatform-samples/fruitties-api",
79+
)
6280
}

Fruitties/shared/src/commonMain/kotlin/com/example/fruitties/di/Factory.kt

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,9 @@ package com.example.fruitties.di
1717

1818
import com.example.fruitties.database.AppDatabase
1919
import com.example.fruitties.database.CartDataStore
20-
import com.example.fruitties.network.FruittieApi
21-
import com.example.fruitties.network.FruittieNetworkApi
22-
import io.ktor.client.HttpClient
23-
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
24-
import io.ktor.http.ContentType
25-
import io.ktor.serialization.kotlinx.json.json
26-
import kotlinx.serialization.json.Json
2720

2821
expect class Factory {
2922
fun createRoomDatabase(): AppDatabase
3023

3124
fun createCartDataStore(): CartDataStore
3225
}
33-
34-
internal fun commonCreateApi(): FruittieApi =
35-
FruittieNetworkApi(
36-
client = HttpClient {
37-
install(ContentNegotiation) {
38-
json(json, contentType = ContentType.Any)
39-
}
40-
},
41-
apiUrl = "https://android.github.io/kotlin-multiplatform-samples/fruitties-api",
42-
)
43-
44-
val json = Json { ignoreUnknownKeys = true }
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* Copyright 2024 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.example.fruitties.utils
17+
18+
import kotlinx.serialization.json.Json
19+
20+
object JsonConfig {
21+
val json = Json { ignoreUnknownKeys = true }
22+
}

0 commit comments

Comments
 (0)