From 4e05bc6166aece5c84a5191feb6dec7280617934 Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 25 Jun 2024 15:46:37 +0900 Subject: [PATCH] [feat] #1 set di Module --- .../dataremote/interceptor/AuthInterceptor.kt | 26 +++++++ .../org/sopt/dateroad/di/DataSourceModule.kt | 10 +++ .../org/sopt/dateroad/di/NetworkModule.kt | 78 +++++++++++++++++++ .../org/sopt/dateroad/di/RepositoryModule.kt | 10 +++ .../org/sopt/dateroad/di/ServiceModule.kt | 11 +++ .../sopt/dateroad/di/qualifier/Qualifier.kt | 9 +++ 6 files changed, 144 insertions(+) create mode 100644 app/src/main/java/org/sopt/dateroad/data/dataremote/interceptor/AuthInterceptor.kt create mode 100644 app/src/main/java/org/sopt/dateroad/di/DataSourceModule.kt create mode 100644 app/src/main/java/org/sopt/dateroad/di/NetworkModule.kt create mode 100644 app/src/main/java/org/sopt/dateroad/di/RepositoryModule.kt create mode 100644 app/src/main/java/org/sopt/dateroad/di/ServiceModule.kt create mode 100644 app/src/main/java/org/sopt/dateroad/di/qualifier/Qualifier.kt diff --git a/app/src/main/java/org/sopt/dateroad/data/dataremote/interceptor/AuthInterceptor.kt b/app/src/main/java/org/sopt/dateroad/data/dataremote/interceptor/AuthInterceptor.kt new file mode 100644 index 00000000..65d1aa2d --- /dev/null +++ b/app/src/main/java/org/sopt/dateroad/data/dataremote/interceptor/AuthInterceptor.kt @@ -0,0 +1,26 @@ +package org.sopt.dateroad.data.dataremote.interceptor + +import okhttp3.Interceptor +import okhttp3.Response +import javax.inject.Inject + +class AuthInterceptor @Inject constructor() : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + val originalRequest = chain.request() + val authRequest = originalRequest.newBuilder().addHeader(AUTHORIZATION, "").build() + val response = chain.proceed(authRequest) + + when (response.code) { + CODE_TOKEN_EXPIRE -> { + // TODO 토큰 재발급 api 연동 + } + } + return response + } + + companion object { + const val CODE_TOKEN_EXPIRE = 401 + const val AUTHORIZATION = "Authorization" + const val BEARER = "Bearer " + } +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dateroad/di/DataSourceModule.kt b/app/src/main/java/org/sopt/dateroad/di/DataSourceModule.kt new file mode 100644 index 00000000..7c7d9940 --- /dev/null +++ b/app/src/main/java/org/sopt/dateroad/di/DataSourceModule.kt @@ -0,0 +1,10 @@ +package org.sopt.dateroad.di + +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +abstract class DataSourceModule { +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dateroad/di/NetworkModule.kt b/app/src/main/java/org/sopt/dateroad/di/NetworkModule.kt new file mode 100644 index 00000000..0c375ef0 --- /dev/null +++ b/app/src/main/java/org/sopt/dateroad/di/NetworkModule.kt @@ -0,0 +1,78 @@ +package org.sopt.dateroad.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.Interceptor +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import org.sopt.dateroad.BuildConfig +import org.sopt.dateroad.BuildConfig.DEBUG +import org.sopt.dateroad.data.dataremote.interceptor.AuthInterceptor +import org.sopt.dateroad.di.qualifier.Auth +import org.sopt.dateroad.di.qualifier.DateRoad +import retrofit2.Retrofit +import java.util.concurrent.TimeUnit +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object NetworkModule { + @OptIn(ExperimentalSerializationApi::class) + @Provides + @Singleton + fun providesJson(): Json = + Json { + isLenient = true + prettyPrint = true + explicitNulls = false + ignoreUnknownKeys = true + } + + @Provides + @Singleton + fun providesOkHttpClient( + loggingInterceptor: HttpLoggingInterceptor, + @Auth authInterceptor: Interceptor, + ): OkHttpClient = + OkHttpClient.Builder().apply { + connectTimeout(10, TimeUnit.SECONDS) + writeTimeout(10, TimeUnit.SECONDS) + readTimeout(10, TimeUnit.SECONDS) + addInterceptor(authInterceptor) + if (DEBUG) addInterceptor(loggingInterceptor) + }.build() + + @Provides + @Singleton + fun providesLoggingInterceptor(): HttpLoggingInterceptor = + HttpLoggingInterceptor().apply { + level = HttpLoggingInterceptor.Level.BODY + } + + @Provides + @Singleton + @Auth + fun provideAuthInterceptor(interceptor: AuthInterceptor): Interceptor = interceptor + + @ExperimentalSerializationApi + @Provides + @DateRoad + @Singleton + fun providesPingleRetrofit( + okHttpClient: OkHttpClient, + json: Json, + ): Retrofit = + Retrofit.Builder() + .baseUrl(BuildConfig.BASE_URL) + .client(okHttpClient) + .addConverterFactory( + json.asConverterFactory(requireNotNull("application/json".toMediaTypeOrNull())), + ) + .build() +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dateroad/di/RepositoryModule.kt b/app/src/main/java/org/sopt/dateroad/di/RepositoryModule.kt new file mode 100644 index 00000000..ac2b48b5 --- /dev/null +++ b/app/src/main/java/org/sopt/dateroad/di/RepositoryModule.kt @@ -0,0 +1,10 @@ +package org.sopt.dateroad.di + +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +abstract class RepositoryModule { +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dateroad/di/ServiceModule.kt b/app/src/main/java/org/sopt/dateroad/di/ServiceModule.kt new file mode 100644 index 00000000..11d6ed7f --- /dev/null +++ b/app/src/main/java/org/sopt/dateroad/di/ServiceModule.kt @@ -0,0 +1,11 @@ +package org.sopt.dateroad.di + +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +object ServiceModule { + +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dateroad/di/qualifier/Qualifier.kt b/app/src/main/java/org/sopt/dateroad/di/qualifier/Qualifier.kt new file mode 100644 index 00000000..156bced9 --- /dev/null +++ b/app/src/main/java/org/sopt/dateroad/di/qualifier/Qualifier.kt @@ -0,0 +1,9 @@ +package org.sopt.dateroad.di.qualifier + +import javax.inject.Qualifier + +@Qualifier +annotation class DateRoad + +@Qualifier +annotation class Auth \ No newline at end of file