Skip to content

Commit d65d89d

Browse files
authored
Merge pull request #10 from YAPP-Github/feature/NDGL-17
[NDGL-17] 네트워크 구조 설정
2 parents 26d128f + daaecf1 commit d65d89d

File tree

27 files changed

+622
-5
lines changed

27 files changed

+622
-5
lines changed

.github/workflows/android_ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ jobs:
3030
- name: Set up local.properties
3131
run: echo "${{ secrets.LOCAL_PROPERTIES }}" > local.properties
3232

33+
- name: Set up google-services.json
34+
run: echo '${{ secrets.GOOGLE_SERVICES }}' | base64 -d > app/google-services.json
35+
3336
- name: Code style checks
3437
run: ./gradlew ktlintCheck detekt
3538

app/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
plugins {
22
id("ndgl.application")
3+
alias(libs.plugins.google.services)
4+
alias(libs.plugins.firebase.crashlytics)
35
}
46

57
android {
68
namespace = Configuration.APPLICATION_ID
79

10+
buildFeatures {
11+
buildConfig = true
12+
}
13+
814
buildTypes {
915
release {
1016
isMinifyEnabled = true

app/src/main/java/com/yapp/ndgl/NDGLApplication.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@ package com.yapp.ndgl
22

33
import android.app.Application
44
import dagger.hilt.android.HiltAndroidApp
5+
import timber.log.Timber
56

67
@HiltAndroidApp
7-
class NDGLApplication : Application()
8+
class NDGLApplication : Application() {
9+
override fun onCreate() {
10+
super.onCreate()
11+
12+
if (BuildConfig.DEBUG) {
13+
Timber.plant(Timber.DebugTree())
14+
}
15+
}
16+
}

build-logic/src/main/kotlin/NDGLAndroidLibraryPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import convention.configureComposeAndroid
22
import convention.configureFirebase
33
import convention.configureKotlinAndroid
4+
import convention.configureTimber
45
import org.gradle.api.Plugin
56
import org.gradle.api.Project
67
import org.gradle.kotlin.dsl.dependencies
@@ -16,6 +17,7 @@ class NDGLAndroidLibraryPlugin : Plugin<Project> {
1617
configureKotlinAndroid()
1718
configureFirebase()
1819
configureComposeAndroid()
20+
configureTimber()
1921

2022
dependencies {
2123
"implementation"(libs.findLibrary("kotlinx-immutable").get())
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,33 @@
11
import convention.configureCoroutineAndroid
22
import convention.configureHiltAndroid
33
import convention.configureKotlinAndroid
4+
import convention.configureTimber
45
import org.gradle.api.Plugin
56
import org.gradle.api.Project
7+
import org.gradle.kotlin.dsl.dependencies
8+
import util.libs
69

710
class NDGLDataPlugin : Plugin<Project> {
811
override fun apply(target: Project): Unit = with(target) {
912
with(pluginManager) {
1013
apply("com.android.library")
14+
apply("org.jetbrains.kotlin.plugin.serialization")
1115
}
1216

1317
configureKotlinAndroid()
1418
configureHiltAndroid()
1519
configureCoroutineAndroid()
20+
configureTimber()
21+
22+
if (path != ":data:core") {
23+
dependencies.add("implementation", project(":data:core"))
24+
}
25+
26+
dependencies {
27+
"implementation"(libs.findLibrary("retrofit").get())
28+
"implementation"(libs.findLibrary("retrofit-kotlinx-serialization-json").get())
29+
"implementation"(libs.findLibrary("kotlinx-serialization-json").get())
30+
"implementation"(libs.findLibrary("okhttp").get())
31+
}
1632
}
1733
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.yapp.ndgl.core.util
2+
3+
import kotlin.coroutines.cancellation.CancellationException
4+
5+
suspend inline fun <T, R> T.suspendRunCatching(crossinline block: suspend T.() -> R): Result<R> {
6+
return try {
7+
Result.success(block())
8+
} catch (e: CancellationException) {
9+
throw e
10+
} catch (t: Throwable) {
11+
Result.failure(t)
12+
}
13+
}

data/auth/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ android {
77
}
88

99
dependencies {
10-
implementation(project(":data:core"))
10+
implementation(libs.androidx.datastore)
1111
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.yapp.ndgl.data.auth.api
2+
3+
import com.yapp.ndgl.data.auth.model.AuthResponse
4+
import com.yapp.ndgl.data.auth.model.CreateUserRequest
5+
import com.yapp.ndgl.data.auth.model.LoginRequest
6+
import com.yapp.ndgl.data.core.model.BaseResponse
7+
import retrofit2.http.Body
8+
import retrofit2.http.POST
9+
10+
interface AuthApi {
11+
@POST("/api/v1/auth/users")
12+
suspend fun createUser(
13+
@Body request: CreateUserRequest,
14+
): BaseResponse<AuthResponse>
15+
16+
@POST("/api/v1/auth/login")
17+
suspend fun login(
18+
@Body request: LoginRequest,
19+
): BaseResponse<AuthResponse>
20+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.yapp.ndgl.data.auth.di
2+
3+
import com.yapp.ndgl.data.auth.token.TokenManagerImpl
4+
import com.yapp.ndgl.data.core.token.TokenManager
5+
import dagger.Binds
6+
import dagger.Module
7+
import dagger.hilt.InstallIn
8+
import dagger.hilt.components.SingletonComponent
9+
import javax.inject.Singleton
10+
11+
@Module
12+
@InstallIn(SingletonComponent::class)
13+
abstract class AuthModule {
14+
@Binds
15+
@Singleton
16+
abstract fun bindTokenManager(
17+
impl: TokenManagerImpl,
18+
): TokenManager
19+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.yapp.ndgl.data.auth.di
2+
3+
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
4+
import com.yapp.ndgl.data.auth.api.AuthApi
5+
import com.yapp.ndgl.data.core.adapter.NDGLCallAdapterFactory
6+
import com.yapp.ndgl.data.core.di.AuthClient
7+
import dagger.Module
8+
import dagger.Provides
9+
import dagger.hilt.InstallIn
10+
import dagger.hilt.components.SingletonComponent
11+
import kotlinx.serialization.json.Json
12+
import okhttp3.MediaType.Companion.toMediaType
13+
import okhttp3.OkHttpClient
14+
import retrofit2.Retrofit
15+
import javax.inject.Singleton
16+
17+
@Module
18+
@InstallIn(SingletonComponent::class)
19+
object AuthNetworkModule {
20+
@Provides
21+
@Singleton
22+
fun provideAuthApi(
23+
json: Json,
24+
baseUrl: String,
25+
@AuthClient okHttpClient: OkHttpClient,
26+
callAdapterFactory: NDGLCallAdapterFactory,
27+
): AuthApi = Retrofit.Builder()
28+
.baseUrl(baseUrl)
29+
.client(okHttpClient)
30+
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
31+
.addCallAdapterFactory(callAdapterFactory)
32+
.build()
33+
.create(AuthApi::class.java)
34+
}

0 commit comments

Comments
 (0)