Add build type params, fix network module structure

This commit is contained in:
Shcherbatykh Oleg
2026-02-13 10:34:09 +03:00
parent 314adaff43
commit 6a41e301d9
14 changed files with 88 additions and 43 deletions

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>

View File

@@ -0,0 +1,7 @@
package ru.fincode.tsudesk.core.common.config
data class AppConfig(
val isDebug: Boolean,
val baseUrl: String,
val networkTimeoutSec: Long
)

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>

View File

@@ -48,4 +48,6 @@ dependencies {
api(libs.moshi)
api(libs.moshiKotlin)
api(libs.retrofitMoshi)
implementation(project(":core:common"))
}

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>

View File

@@ -1,5 +1,5 @@
package ru.fincode.tsudesk.core.network
object Constants {
const val BASE_URL = "https://tulsu.ru/schedule/queries/"
}

View File

@@ -0,0 +1,29 @@
package ru.fincode.tsudesk.core.network
import okhttp3.OkHttpClient
import ru.fincode.tsudesk.core.common.config.AppConfig
import ru.fincode.tsudesk.core.network.interceptor.DebugInterceptor
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class OkHttpClientFactory @Inject constructor(
private val appConfig: AppConfig,
private val debugInterceptor: DebugInterceptor
) {
fun create(): OkHttpClient {
val builder = OkHttpClient.Builder()
.connectTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS)
.readTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS)
.writeTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
if (appConfig.isDebug) {
builder.addInterceptor(debugInterceptor)
}
return builder.build()
}
}

View File

@@ -1,21 +1,21 @@
package ru.fincode.tsudesk.core.network
import com.squareup.moshi.Moshi
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import javax.inject.Inject
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class RetrofitProvider @Inject constructor() {
class RetrofitFactory @Inject constructor() {
private val moshi: Moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
fun execute(baseUrl: String, client: OkHttpClient): Retrofit =
fun create(baseUrl: String, client: OkHttpClient): Retrofit =
Retrofit.Builder()
.baseUrl(baseUrl)
.client(client)

View File

@@ -5,26 +5,15 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
import ru.fincode.tsudesk.core.network.interceptor.DebugInterceptor
import java.util.concurrent.TimeUnit
import ru.fincode.tsudesk.core.network.OkHttpClientFactory
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object OkHttpModule {
private const val TIMEOUT = 30L
@Provides
@Singleton
fun provideOkHttpClient(
): OkHttpClient {
return OkHttpClient.Builder()
.connectTimeout(TIMEOUT, TimeUnit.SECONDS)
.readTimeout(TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(TIMEOUT, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.addInterceptor(DebugInterceptor())
.build()
}
fun provideOkHttpClient(factory: OkHttpClientFactory): OkHttpClient =
factory.create()
}

View File

@@ -6,8 +6,8 @@ import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import ru.fincode.tsudesk.core.network.Constants
import ru.fincode.tsudesk.core.network.RetrofitProvider
import ru.fincode.tsudesk.core.common.config.AppConfig
import ru.fincode.tsudesk.core.network.RetrofitFactory
import javax.inject.Singleton
@Module
@@ -17,8 +17,12 @@ object RetrofitModule {
@Provides
@Singleton
fun provideRetrofit(
provider: RetrofitProvider,
client: OkHttpClient
factory: RetrofitFactory,
client: OkHttpClient,
appConfig: AppConfig
): Retrofit =
provider.execute(Constants.BASE_URL, client)
factory.create(
baseUrl = appConfig.baseUrl,
client = client
)
}

View File

@@ -3,18 +3,20 @@ package ru.fincode.tsudesk.core.network.interceptor
import android.util.Log
import okhttp3.Interceptor
import okhttp3.Response
import javax.inject.Inject
import javax.inject.Singleton
private const val TAG = "NETWORK_DEBUG"
class DebugInterceptor : Interceptor {
@Singleton
class DebugInterceptor @Inject constructor() : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
Log.d(TAG, "URL: ${request.url}")
Log.d(TAG, "Method: ${request.method}")
Log.d(TAG, "Headers: ${request.headers}")
return chain.proceed(request)
}
}
}

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>