-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathAppContainer.kt
44 lines (37 loc) · 1.5 KB
/
AppContainer.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package nextstep.github.di
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import kotlinx.serialization.json.Json
import nextstep.github.data.repository.GithubRepository
import nextstep.github.data.repository.GithubRepositoryImpl
import nextstep.github.data.network.GithubService
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import java.util.concurrent.TimeUnit
class AppContainer {
private val serialization = Json { ignoreUnknownKeys = true }
private val httpLoggingInterceptor = HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
}
private val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(
OkHttpClient
.Builder()
.addInterceptor(httpLoggingInterceptor)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build()
)
.addConverterFactory(serialization.asConverterFactory(CONTENT_TYPE.toMediaType()))
.build()
private val githubService = retrofit
.create(GithubService::class.java)
val githubRepository: GithubRepository = GithubRepositoryImpl(githubService)
companion object {
private const val CONTENT_TYPE = "application/json"
private const val BASE_URL = "https://api.github.com"
}
}