From f5d48677976dfdbd76927a5574b8419ec86b2f31 Mon Sep 17 00:00:00 2001 From: Shcherbatykh Oleg Date: Tue, 10 Feb 2026 13:54:23 +0300 Subject: [PATCH] add base network logic --- app/build.gradle.kts | 2 ++ core/network/build.gradle.kts | 9 ++++--- .../core/network/HttpClientProvider.kt | 10 ++++++++ .../tsudesk/core/network/NetworkConstants.kt | 5 ++++ .../tsudesk/core/network/NetworkError.kt | 8 ++++++ .../tsudesk/core/network/NetworkResult.kt | 6 +++++ .../tsudesk/core/network/RetrofitProvider.kt | 11 ++++++++ .../tsudesk/core/network/di/NetworkModule.kt | 25 +++++++++++++++++++ 8 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 core/network/src/main/java/ru/fincode/tsudesk/core/network/HttpClientProvider.kt create mode 100644 core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkConstants.kt create mode 100644 core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkError.kt create mode 100644 core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkResult.kt create mode 100644 core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitProvider.kt create mode 100644 core/network/src/main/java/ru/fincode/tsudesk/core/network/di/NetworkModule.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 35de362..98b3192 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -37,6 +37,8 @@ dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material) + implementation(libs.androidx.activity) + implementation(libs.androidx.constraintlayout) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index f9596ca..02b93e2 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -33,8 +33,9 @@ android { dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) - implementation(libs.material) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.androidx.espresso.core) + + implementation("com.squareup.okhttp3:okhttp:5.3.2") + implementation("com.squareup.okhttp3:logging-interceptor:5.3.2") + implementation("com.squareup.retrofit2:retrofit:3.0.0") + implementation("com.squareup.retrofit2:converter-simplexml:3.0.0") } \ No newline at end of file diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/HttpClientProvider.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/HttpClientProvider.kt new file mode 100644 index 0000000..f8681ad --- /dev/null +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/HttpClientProvider.kt @@ -0,0 +1,10 @@ +package ru.fincode.tsudesk.core.network + +object HttpClientProvider { + + fun provide(): OkHttpClient = + OkHttpClient.Builder() + .connectTimeout(15, TimeUnit.SECONDS) + .readTimeout(15, TimeUnit.SECONDS) + .build() +} \ No newline at end of file diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkConstants.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkConstants.kt new file mode 100644 index 0000000..fa5cda0 --- /dev/null +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkConstants.kt @@ -0,0 +1,5 @@ +package ru.fincode.tsudesk.core.network + +object NetworkConstants { + const val BASE_URL = "https://api.tsu.tula.ru/" +} \ No newline at end of file diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkError.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkError.kt new file mode 100644 index 0000000..a626e84 --- /dev/null +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkError.kt @@ -0,0 +1,8 @@ +package ru.fincode.tsudesk.core.network + +sealed class NetworkError { + object NoInternet : NetworkError() + object Timeout : NetworkError() + data class Http(val code: Int) : NetworkError() + data class Unknown(val throwable: Throwable) : NetworkError() +} \ No newline at end of file diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkResult.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkResult.kt new file mode 100644 index 0000000..c4f9f09 --- /dev/null +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/NetworkResult.kt @@ -0,0 +1,6 @@ +package ru.fincode.tsudesk.core.network + +sealed class NetworkResult { + data class Success(val data: T) : NetworkResult() + data class Error(val error: NetworkError) : NetworkResult() +} \ No newline at end of file diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitProvider.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitProvider.kt new file mode 100644 index 0000000..9946976 --- /dev/null +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitProvider.kt @@ -0,0 +1,11 @@ +package ru.fincode.tsudesk.core.network + +object RetrofitProvider { + + fun provide(baseUrl: String, client: OkHttpClient): Retrofit = + Retrofit.Builder() + .baseUrl(baseUrl) + .client(client) + .addConverterFactory(SimpleXmlConverterFactory.create()) + .build() +} diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/NetworkModule.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/NetworkModule.kt new file mode 100644 index 0000000..2ae3a28 --- /dev/null +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/NetworkModule.kt @@ -0,0 +1,25 @@ +package ru.fincode.tsudesk.core.network.di + +import okhttp3.OkHttpClient +import retrofit2.Retrofit +import ru.fincode.tsudesk.core.network.HttpClientProvider +import ru.fincode.tsudesk.core.network.NetworkConstants +import ru.fincode.tsudesk.core.network.RetrofitProvider + +@Module +@InstallIn(SingletonComponent::class) +object NetworkModule { + + @Provides + @Singleton + fun provideOkHttpClient(): OkHttpClient = + HttpClientProvider.provide() + + @Provides + @Singleton + fun provideRetrofit(client: OkHttpClient): Retrofit = + RetrofitProvider.provide( + baseUrl = NetworkConstants.BASE_URL, + client = client + ) +}