Skip to content

Commit

Permalink
Provide TripPlanningService and Retrofit using Dagger (#44)
Browse files Browse the repository at this point in the history
  • Loading branch information
ksharma-xyz authored Sep 15, 2024
1 parent 31f107b commit 13355cb
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 4 deletions.
2 changes: 2 additions & 0 deletions core/network/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ dependencies {
implementation(platform(libs.okhttp.bom))
implementation(libs.okhttp)
implementation(libs.okhttp.logging.interceptor)
implementation(libs.retrofit)
implementation(libs.retrofit2.kotlinx.serialization.converter)
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
package xyz.ksharma.krail.network.di

import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import xyz.ksharma.krail.network.BuildConfig
import xyz.ksharma.krail.network.interceptor.AuthInterceptor
import java.util.concurrent.TimeUnit

@Module
@InstallIn(SingletonComponent::class)
class NetworkModule {
object NetworkModule {

@Provides
fun provideOkHttpClient(): OkHttpClient {
Expand All @@ -34,7 +39,24 @@ class NetworkModule {
return okhttpBuilder.build()
}

companion object {
const val BASE_URL = "https://api.transport.nsw.gov.au"
@OptIn(ExperimentalSerializationApi::class)
@Provides
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
val json = Json { ignoreUnknownKeys = true }

val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory(
json.asConverterFactory(
"application/json; charset=UTF8".toMediaType()
)
)
.build()
return retrofit
}

fun <T> service(retrofit: Retrofit, clazz: Class<T>): T = retrofit.create(clazz)

const val BASE_URL = "https://api.transport.nsw.gov.au"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import okhttp3.Response
import xyz.ksharma.krail.coroutines.ext.safeResult
import xyz.ksharma.krail.di.AppDispatchers
import xyz.ksharma.krail.di.Dispatcher
import xyz.ksharma.krail.network.di.NetworkModule.Companion.BASE_URL
import xyz.ksharma.krail.network.di.NetworkModule.BASE_URL
import xyz.ksharma.krail.network.interceptor.AuthInterceptor.Companion.API_KEY
import xyz.ksharma.krail.sydney.trains.network.api.SydneyTrainsService
import javax.inject.Inject
Expand Down
1 change: 1 addition & 0 deletions feature/trip-planner/network/api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
plugins {
alias(libs.plugins.krail.android.library)
alias(libs.plugins.krail.android.hilt)
}

android {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package xyz.ksharma.krail.trip.planner.network.api

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import retrofit2.Retrofit
import xyz.ksharma.krail.network.di.NetworkModule
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
interface ServiceModule {

@Provides
@Singleton
fun provideTripPlanningService(retrofit: Retrofit): TripPlanningService {
return NetworkModule.service(retrofit, TripPlanningService::class.java)
}
}
1 change: 1 addition & 0 deletions feature/trip-planner/network/real/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ dependencies {

implementation(platform(libs.okhttp.bom))
implementation(libs.okhttp)
implementation(libs.retrofit)
}
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ ksp = "2.0.0-1.0.22"
opencsv = "5.5.2"
paparazzi = "1.3.2"
retrofit = "2.9.0"
retrofit2KotlinxSerializationConverter = "0.8.0"
sqldelight = "2.0.2"
sqliteAndroidDriver = "2.0.2"
wire = "5.0.0"
Expand All @@ -41,6 +42,7 @@ lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtim
lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "android-lifecycle" }
lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "android-lifecycle" }
opencsv = { module = "com.opencsv:opencsv", version.ref = "opencsv" }
retrofit2-kotlinx-serialization-converter = { module = "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", version.ref = "retrofit2KotlinxSerializationConverter" }
timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" }

#Compose
Expand Down

0 comments on commit 13355cb

Please sign in to comment.