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