77 lines
2.0 KiB
Kotlin
77 lines
2.0 KiB
Kotlin
package com.novayaplaneta.di
|
|
|
|
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
|
import com.novayaplaneta.data.remote.AuthApi
|
|
import com.novayaplaneta.data.remote.AuthInterceptor
|
|
import com.novayaplaneta.data.remote.BackendApi
|
|
import dagger.Module
|
|
import dagger.Provides
|
|
import dagger.hilt.InstallIn
|
|
import dagger.hilt.components.SingletonComponent
|
|
import kotlinx.serialization.json.Json
|
|
import okhttp3.MediaType.Companion.toMediaType
|
|
import okhttp3.OkHttpClient
|
|
import okhttp3.logging.HttpLoggingInterceptor
|
|
import retrofit2.Retrofit
|
|
import java.util.concurrent.TimeUnit
|
|
import javax.inject.Singleton
|
|
|
|
@Module
|
|
@InstallIn(SingletonComponent::class)
|
|
object NetworkModule {
|
|
|
|
private val json = Json {
|
|
ignoreUnknownKeys = true
|
|
isLenient = true
|
|
encodeDefaults = false
|
|
}
|
|
|
|
@Provides
|
|
@Singleton
|
|
fun provideOkHttpClient(
|
|
authInterceptor: AuthInterceptor
|
|
): OkHttpClient {
|
|
val loggingInterceptor = HttpLoggingInterceptor().apply {
|
|
level = HttpLoggingInterceptor.Level.BODY
|
|
}
|
|
|
|
return OkHttpClient.Builder()
|
|
.addInterceptor(authInterceptor)
|
|
.addInterceptor(loggingInterceptor)
|
|
.connectTimeout(30, TimeUnit.SECONDS)
|
|
.readTimeout(30, TimeUnit.SECONDS)
|
|
.writeTimeout(30, TimeUnit.SECONDS)
|
|
.build()
|
|
}
|
|
@Provides
|
|
@Singleton
|
|
fun provideRetrofit(
|
|
okHttpClient: OkHttpClient
|
|
): Retrofit {
|
|
val contentType = "application/json".toMediaType()
|
|
|
|
return Retrofit.Builder()
|
|
.baseUrl("http://10.0.2.2:8000/")
|
|
.client(okHttpClient)
|
|
.addConverterFactory(json.asConverterFactory(contentType))
|
|
.build()
|
|
}
|
|
|
|
@Provides
|
|
@Singleton
|
|
fun provideAuthApi(
|
|
retrofit: Retrofit
|
|
): AuthApi {
|
|
return retrofit.create(AuthApi::class.java)
|
|
}
|
|
|
|
@Provides
|
|
@Singleton
|
|
fun provideBackendApi(
|
|
retrofit: Retrofit
|
|
): BackendApi {
|
|
return retrofit.create(BackendApi::class.java)
|
|
}
|
|
}
|
|
|