Skip to content

Commit 906c6ad

Browse files
authored
add caching by default and refactor a bit (#104)
1 parent c3737ba commit 906c6ad

File tree

4 files changed

+33
-45
lines changed

4 files changed

+33
-45
lines changed

src/commonMain/kotlin/dev/sargunv/pokekotlin/client/PokeApi.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.sargunv.pokekotlin.client
22

3+
import de.jensklingenberg.ktorfit.Ktorfit.Builder
34
import de.jensklingenberg.ktorfit.http.GET
45
import de.jensklingenberg.ktorfit.http.Path
56
import de.jensklingenberg.ktorfit.http.Query
@@ -54,6 +55,14 @@ import dev.sargunv.pokekotlin.model.SuperContestEffect
5455
import dev.sargunv.pokekotlin.model.Type
5556
import dev.sargunv.pokekotlin.model.Version
5657
import dev.sargunv.pokekotlin.model.VersionGroup
58+
import dev.sargunv.pokekotlin.util.getDefaultEngine
59+
import io.ktor.client.HttpClient
60+
import io.ktor.client.HttpClientConfig
61+
import io.ktor.client.engine.HttpClientEngine
62+
import io.ktor.client.plugins.cache.HttpCache
63+
import io.ktor.client.plugins.cache.storage.CacheStorage
64+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
65+
import io.ktor.serialization.kotlinx.json.json
5766

5867
interface PokeApi {
5968

@@ -544,4 +553,24 @@ interface PokeApi {
544553
@GET("language/{id}/") suspend fun getLanguage(@Path("id") id: Int): Language
545554

546555
// endregion Utility
556+
557+
companion object : PokeApi by PokeApi()
547558
}
559+
560+
fun PokeApi(
561+
baseUrl: String = "https://pokeapi.co/api/v2/",
562+
engine: HttpClientEngine = getDefaultEngine(),
563+
cacheStorage: CacheStorage? = null,
564+
configure: HttpClientConfig<*>.() -> Unit = {},
565+
) =
566+
Builder()
567+
.baseUrl(baseUrl)
568+
.httpClient(
569+
HttpClient(engine) {
570+
this.configure()
571+
this.install(HttpCache) { cacheStorage?.let { privateStorage(it) } }
572+
this.install(ContentNegotiation) { json(PokeApiJson) }
573+
}
574+
)
575+
.build()
576+
.createPokeApi()

src/commonMain/kotlin/dev/sargunv/pokekotlin/client/PokeApiClient.kt

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dev.sargunv.pokekotlin.test
22

3-
import dev.sargunv.pokekotlin.client.PokeApiClient
3+
import dev.sargunv.pokekotlin.client.PokeApi
44
import kotlin.test.Ignore
55
import kotlin.test.Test
66
import kotlin.test.assertEquals
@@ -9,15 +9,10 @@ import kotlinx.coroutines.test.runTest
99
@Ignore
1010
class LiveTest {
1111

12-
private val liveClient = PokeApiClient()
13-
14-
@Test fun liveObject() = runTest { assertEquals("sitrus", liveClient.getBerry(10).name) }
12+
@Test fun liveObject() = runTest { assertEquals("sitrus", PokeApi.getBerry(10).name) }
1513

1614
@Test
1715
fun liveList() = runTest {
18-
assertEquals(
19-
liveClient.getMoveList(0, 50).results[25],
20-
liveClient.getMoveList(25, 50).results[0],
21-
)
16+
assertEquals(PokeApi.getMoveList(0, 50).results[25], PokeApi.getMoveList(25, 50).results[0])
2217
}
2318
}

src/commonTest/kotlin/dev/sargunv/pokekotlin/test/StaticPokeApi.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package dev.sargunv.pokekotlin.test
22

33
import dev.sargunv.pokekotlin.client.PokeApi
4-
import dev.sargunv.pokekotlin.client.PokeApiClient
54
import dev.sargunv.pokekotlin.client.PokeApiJson
65
import dev.sargunv.pokekotlin.model.ApiResourceList
76
import dev.sargunv.pokekotlin.model.NamedApiResourceList
@@ -43,6 +42,4 @@ private val OffsetLimitPlugin =
4342
}
4443

4544
object StaticPokeApi :
46-
PokeApi by (PokeApiClient(baseUrl = "http://localhost:8080/api/v2/") {
47-
install(OffsetLimitPlugin)
48-
})
45+
PokeApi by (PokeApi(baseUrl = "http://localhost:8080/api/v2/") { install(OffsetLimitPlugin) })

0 commit comments

Comments
 (0)