Skip to content

Commit 40d6049

Browse files
authored
Merge pull request #64 from Nico1eKim/api/#62-api_setting
[API] api 연결 세팅
2 parents 8e94fca + 06a3cde commit 40d6049

12 files changed

Lines changed: 172 additions & 6 deletions

File tree

.idea/compiler.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle.kts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
import org.gradle.kotlin.dsl.implementation
1+
import java.util.Properties
22

33
plugins {
44
alias(libs.plugins.android.application)
55
alias(libs.plugins.kotlin.android)
66
alias(libs.plugins.kotlin.compose)
77
alias(libs.plugins.kotlin.serialization)
8+
id("com.google.dagger.hilt.android")
9+
kotlin("kapt")
10+
}
11+
12+
val properties = Properties().apply {
13+
load(project.rootProject.file("local.properties").inputStream())
814
}
915

1016
android {
@@ -19,6 +25,8 @@ android {
1925
versionName = "1.0"
2026

2127
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
28+
29+
buildConfigField("String", "BASE_URL", "\"${properties["BASE_URL"]}\"")
2230
}
2331

2432
buildTypes {
@@ -39,6 +47,7 @@ android {
3947
}
4048
buildFeatures {
4149
compose = true
50+
buildConfig = true
4251
}
4352
}
4453

@@ -67,4 +76,22 @@ dependencies {
6776
androidTestImplementation(libs.androidx.ui.test.junit4)
6877
debugImplementation(libs.androidx.ui.tooling)
6978
debugImplementation(libs.androidx.ui.test.manifest)
79+
80+
// Hilt
81+
implementation(libs.hilt.android)
82+
kapt(libs.hilt.android.compiler)
83+
implementation(libs.androidx.hilt.navigation.compose)
84+
85+
// Retrofit
86+
implementation(libs.retrofit)
87+
implementation(libs.converter.gson)
88+
implementation(libs.retrofit.kotlin.serialization.converter)
89+
90+
// OkHttp
91+
implementation(libs.okhttp)
92+
implementation(libs.logging.interceptor)
93+
}
94+
95+
kapt {
96+
correctErrorTypes = true
7097
}

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
xmlns:tools="http://schemas.android.com/tools">
44

55
<application
6+
android:name=".ThipApplication"
67
android:allowBackup="true"
78
android:dataExtractionRules="@xml/data_extraction_rules"
89
android:fullBackupContent="@xml/backup_rules"

app/src/main/java/com/texthip/thip/MainActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import androidx.compose.ui.tooling.preview.Preview
1212
import com.texthip.thip.ui.theme.ThipTheme
1313
import com.texthip.thip.ui.theme.ThipTheme.colors
1414
import com.texthip.thip.ui.theme.ThipTheme.typography
15+
import dagger.hilt.android.AndroidEntryPoint
1516

17+
@AndroidEntryPoint
1618
class MainActivity : ComponentActivity() {
1719
override fun onCreate(savedInstanceState: Bundle?) {
1820
super.onCreate(savedInstanceState)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.texthip.thip
2+
3+
import android.app.Application
4+
import dagger.hilt.android.HiltAndroidApp
5+
6+
@HiltAndroidApp
7+
class ThipApplication : Application()
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.texthip.thip.data.di
2+
3+
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
4+
import com.texthip.thip.BuildConfig
5+
import dagger.Module
6+
import dagger.Provides
7+
import dagger.hilt.InstallIn
8+
import dagger.hilt.components.SingletonComponent
9+
import kotlinx.serialization.ExperimentalSerializationApi
10+
import kotlinx.serialization.json.Json
11+
import okhttp3.MediaType.Companion.toMediaType
12+
import okhttp3.OkHttpClient
13+
import okhttp3.logging.HttpLoggingInterceptor
14+
import retrofit2.Retrofit
15+
import java.util.concurrent.TimeUnit
16+
import javax.inject.Singleton
17+
18+
@Module
19+
@InstallIn(SingletonComponent::class)
20+
object NetworkModule {
21+
@OptIn(ExperimentalSerializationApi::class)
22+
@Provides
23+
@Singleton
24+
fun provideJson(): Json =
25+
Json {
26+
isLenient = true // 유연한 JSON 구분 허용
27+
prettyPrint = true // 출력 JSON 을 예쁘게 들여쓰기해서 가독성을 높임
28+
encodeDefaults = true // 파라미터의 기본값(default) 을 JSON 으로 인코딩
29+
explicitNulls = false // null 값을 명시적으로 표시하지 않음
30+
ignoreUnknownKeys = true // JSON 에 정의하지 않은 키가 있어도 무시하고 파싱
31+
}
32+
33+
@Provides
34+
@Singleton
35+
fun providesOkHttpClient(
36+
loggingInterceptor: HttpLoggingInterceptor,
37+
// authInterceptor: AuthInterceptor,
38+
// authAuthenticator: TokenAuthenticator
39+
): OkHttpClient =
40+
OkHttpClient.Builder().apply {
41+
connectTimeout(10, TimeUnit.SECONDS)
42+
writeTimeout(10, TimeUnit.SECONDS)
43+
readTimeout(10, TimeUnit.SECONDS)
44+
addInterceptor(loggingInterceptor)
45+
// addInterceptor(authInterceptor)
46+
// authenticator(authAuthenticator)
47+
}.build()
48+
49+
@Provides
50+
@Singleton
51+
fun providesLoggingInterceptor(): HttpLoggingInterceptor =
52+
HttpLoggingInterceptor().apply {
53+
level = HttpLoggingInterceptor.Level.BODY
54+
}
55+
56+
@Provides
57+
@Singleton
58+
fun providesRetrofit(
59+
json: Json,
60+
okHttpClient: OkHttpClient
61+
): Retrofit =
62+
Retrofit.Builder()
63+
.baseUrl(BuildConfig.BASE_URL)
64+
.addConverterFactory(
65+
json.asConverterFactory(requireNotNull("application/json".toMediaType()))
66+
)
67+
.client(okHttpClient)
68+
.build()
69+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.texthip.thip.data.di
2+
3+
import dagger.Module
4+
import dagger.hilt.InstallIn
5+
import dagger.hilt.components.SingletonComponent
6+
7+
@Module
8+
@InstallIn(SingletonComponent::class)
9+
object ServiceModule {
10+
// @Provides
11+
// @Singleton
12+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.texthip.thip.data.model.base
2+
3+
fun <T> BaseResponse<T>.handleBaseResponse(): Result<T?> {
4+
return if (isSuccess) {
5+
Result.success(this.response)
6+
} else {
7+
Result.failure(
8+
ThipApiFailureException(
9+
code = this.code,
10+
message = this.message
11+
)
12+
)
13+
}
14+
}
15+
16+
data class ThipApiFailureException(
17+
val code: Int,
18+
override val message: String
19+
) : Throwable()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.texthip.thip.data.model.base
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class BaseResponse<T>(
8+
@SerialName("isSuccess") val isSuccess: Boolean,
9+
@SerialName("code") val code: Int,
10+
@SerialName("message") val message: String,
11+
@SerialName("data") val response: T? = null,
12+
)

0 commit comments

Comments
 (0)