Skip to content

Commit fea07fe

Browse files
committed
[feat]: network module 세팅 (#62)
1 parent 2c37a09 commit fea07fe

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.texthip.thip.data.di
2+
3+
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
4+
import com.texthip.thip.BuildConfig
5+
import dagger.Module
6+
import dagger.Provides
7+
import dagger.hilt.InstallIn
8+
import dagger.hilt.components.SingletonComponent
9+
import kotlinx.serialization.ExperimentalSerializationApi
10+
import kotlinx.serialization.json.Json
11+
import okhttp3.MediaType.Companion.toMediaType
12+
import okhttp3.OkHttpClient
13+
import okhttp3.logging.HttpLoggingInterceptor
14+
import retrofit2.Retrofit
15+
import java.util.concurrent.TimeUnit
16+
import javax.inject.Singleton
17+
18+
@Module
19+
@InstallIn(SingletonComponent::class)
20+
object NetworkModule {
21+
@OptIn(ExperimentalSerializationApi::class)
22+
@Provides
23+
@Singleton
24+
fun provideJson(): Json =
25+
Json {
26+
isLenient = true // 유연한 JSON 구분 허용
27+
prettyPrint = true // 출력 JSON 을 예쁘게 들여쓰기해서 가독성을 높임
28+
encodeDefaults = true // 파라미터의 기본값(default) 을 JSON 으로 인코딩
29+
explicitNulls = false // null 값을 명시적으로 표시하지 않음
30+
ignoreUnknownKeys = true // JSON 에 정의하지 않은 키가 있어도 무시하고 파싱
31+
}
32+
33+
@Provides
34+
@Singleton
35+
fun providesOkHttpClient(
36+
loggingInterceptor: HttpLoggingInterceptor,
37+
// authInterceptor: AuthInterceptor,
38+
// authAuthenticator: TokenAuthenticator
39+
): OkHttpClient =
40+
OkHttpClient.Builder().apply {
41+
connectTimeout(10, TimeUnit.SECONDS)
42+
writeTimeout(10, TimeUnit.SECONDS)
43+
readTimeout(10, TimeUnit.SECONDS)
44+
addInterceptor(loggingInterceptor)
45+
// addInterceptor(authInterceptor)
46+
// authenticator(authAuthenticator)
47+
}.build()
48+
49+
@Provides
50+
@Singleton
51+
fun providesLoggingInterceptor(): HttpLoggingInterceptor =
52+
HttpLoggingInterceptor().apply {
53+
level = HttpLoggingInterceptor.Level.BODY
54+
}
55+
56+
@Provides
57+
@Singleton
58+
fun providesRetrofit(
59+
json: Json,
60+
okHttpClient: OkHttpClient
61+
): Retrofit =
62+
Retrofit.Builder()
63+
.baseUrl(BuildConfig.BASE_URL)
64+
.addConverterFactory(
65+
json.asConverterFactory(requireNotNull("application/json".toMediaType()))
66+
)
67+
.client(okHttpClient)
68+
.build()
69+
}

0 commit comments

Comments
 (0)