From 08dc6c4066a3d1108ebc339ad4254bbe6d24c97b Mon Sep 17 00:00:00 2001 From: leeseokchan00 <112953135+leeseokchan00@users.noreply.github.com> Date: Tue, 24 Jun 2025 21:55:11 +0900 Subject: [PATCH 1/4] feature#5 add feature module --- feature/{home => course}/.gitignore | 0 feature/course/build.gradle.kts | 7 ++++ .../src/main/AndroidManifest.xml | 0 feature/home/consumer-rules.pro | 0 feature/home/proguard-rules.pro | 21 ------------ .../com/teamsolply/solply/home/HomeScreen.kt | 32 ------------------- .../solply/home/navigation/HomeNavigation.kt | 29 ----------------- feature/main/build.gradle.kts | 1 - .../com/teamsolply/solply/main/MainNavTab.kt | 21 ++---------- .../teamsolply/solply/main/MainNavigator.kt | 9 ++---- .../com/teamsolply/solply/main/MainScreen.kt | 2 -- feature/maps/.gitignore | 1 + feature/{home => maps}/build.gradle.kts | 2 +- feature/maps/src/main/AndroidManifest.xml | 4 +++ feature/mypage/.gitignore | 1 + feature/mypage/build.gradle.kts | 7 ++++ feature/mypage/src/main/AndroidManifest.xml | 4 +++ .../oauth/{presentation => }/OauthContract.kt | 2 +- .../oauth/{presentation => }/OauthScreen.kt | 3 +- .../{presentation => }/OauthViewModel.kt | 4 +-- .../oauth/navigation/OauthNavigation.kt | 2 +- feature/onboarding/.gitignore | 1 + feature/onboarding/build.gradle.kts | 7 ++++ .../onboarding/src/main/AndroidManifest.xml | 4 +++ feature/place/.gitignore | 1 + feature/place/build.gradle.kts | 7 ++++ feature/place/src/main/AndroidManifest.xml | 4 +++ settings.gradle.kts | 6 +++- 28 files changed, 66 insertions(+), 116 deletions(-) rename feature/{home => course}/.gitignore (100%) create mode 100644 feature/course/build.gradle.kts rename feature/{home => course}/src/main/AndroidManifest.xml (100%) delete mode 100644 feature/home/consumer-rules.pro delete mode 100644 feature/home/proguard-rules.pro delete mode 100644 feature/home/src/main/java/com/teamsolply/solply/home/HomeScreen.kt delete mode 100644 feature/home/src/main/java/com/teamsolply/solply/home/navigation/HomeNavigation.kt create mode 100644 feature/maps/.gitignore rename feature/{home => maps}/build.gradle.kts (58%) create mode 100644 feature/maps/src/main/AndroidManifest.xml create mode 100644 feature/mypage/.gitignore create mode 100644 feature/mypage/build.gradle.kts create mode 100644 feature/mypage/src/main/AndroidManifest.xml rename feature/oauth/src/main/java/com/teamsolply/solply/oauth/{presentation => }/OauthContract.kt (88%) rename feature/oauth/src/main/java/com/teamsolply/solply/oauth/{presentation => }/OauthScreen.kt (98%) rename feature/oauth/src/main/java/com/teamsolply/solply/oauth/{presentation => }/OauthViewModel.kt (89%) create mode 100644 feature/onboarding/.gitignore create mode 100644 feature/onboarding/build.gradle.kts create mode 100644 feature/onboarding/src/main/AndroidManifest.xml create mode 100644 feature/place/.gitignore create mode 100644 feature/place/build.gradle.kts create mode 100644 feature/place/src/main/AndroidManifest.xml diff --git a/feature/home/.gitignore b/feature/course/.gitignore similarity index 100% rename from feature/home/.gitignore rename to feature/course/.gitignore diff --git a/feature/course/build.gradle.kts b/feature/course/build.gradle.kts new file mode 100644 index 00000000..b39f2b06 --- /dev/null +++ b/feature/course/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + alias(libs.plugins.solply.feature) +} + +android { + namespace = "com.teamsolply.solply.course" +} diff --git a/feature/home/src/main/AndroidManifest.xml b/feature/course/src/main/AndroidManifest.xml similarity index 100% rename from feature/home/src/main/AndroidManifest.xml rename to feature/course/src/main/AndroidManifest.xml diff --git a/feature/home/consumer-rules.pro b/feature/home/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/feature/home/proguard-rules.pro b/feature/home/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/feature/home/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/feature/home/src/main/java/com/teamsolply/solply/home/HomeScreen.kt b/feature/home/src/main/java/com/teamsolply/solply/home/HomeScreen.kt deleted file mode 100644 index 40858bfa..00000000 --- a/feature/home/src/main/java/com/teamsolply/solply/home/HomeScreen.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.teamsolply.solply.home - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier - -@Composable -fun HomeRoute( - paddingValues: PaddingValues -) { - HomeScreen() -} - -@Composable -fun HomeScreen( - modifier: Modifier = Modifier -) { - Column( - modifier.fillMaxSize(), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text( - "home" - ) - } -} diff --git a/feature/home/src/main/java/com/teamsolply/solply/home/navigation/HomeNavigation.kt b/feature/home/src/main/java/com/teamsolply/solply/home/navigation/HomeNavigation.kt deleted file mode 100644 index bde2b587..00000000 --- a/feature/home/src/main/java/com/teamsolply/solply/home/navigation/HomeNavigation.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.teamsolply.solply.home.navigation - -import androidx.compose.foundation.layout.PaddingValues -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions -import androidx.navigation.compose.composable -import com.teamsolply.solply.home.HomeRoute -import com.teamsolply.solply.navigation.MainTabRoute -import kotlinx.serialization.Serializable - -fun NavController.navigateHome( - navOptions: NavOptions -) { - navigate(Home, navOptions) -} - -fun NavGraphBuilder.homeNavGraph( - paddingValues: PaddingValues -) { - composable { - HomeRoute( - paddingValues = paddingValues - ) - } -} - -@Serializable -data object Home : MainTabRoute diff --git a/feature/main/build.gradle.kts b/feature/main/build.gradle.kts index e420306b..6411fac1 100644 --- a/feature/main/build.gradle.kts +++ b/feature/main/build.gradle.kts @@ -8,5 +8,4 @@ android { dependencies { implementation(projects.feature.oauth) - implementation(projects.feature.home) } diff --git a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt index a6507d29..3293d5fa 100644 --- a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt +++ b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt @@ -1,8 +1,8 @@ package com.teamsolply.solply.main import androidx.compose.runtime.Composable -import com.teamsolply.solply.home.navigation.Home import com.teamsolply.solply.navigation.Route +import com.teamsolply.solply.oauth.navigation.Oauth internal enum class MainNavTab( val iconResId: Int, @@ -12,27 +12,12 @@ internal enum class MainNavTab( HOME( iconResId = com.teamsolply.solply.designsystem.R.drawable.ic_bottom_nav_dummy, contentDescription = "HOME", - Home + Oauth ), DummyRoute1( iconResId = com.teamsolply.solply.designsystem.R.drawable.ic_bottom_nav_dummy, contentDescription = "DummyRoute1", - Home - ), - DummyRoute2( - iconResId = com.teamsolply.solply.designsystem.R.drawable.ic_bottom_nav_dummy, - contentDescription = "DummyRoute2", - Home - ), - DummyRoute3( - iconResId = com.teamsolply.solply.designsystem.R.drawable.ic_bottom_nav_dummy, - contentDescription = "DummyRoute3", - Home - ), - DummyRoute4( - iconResId = com.teamsolply.solply.designsystem.R.drawable.ic_bottom_nav_dummy, - contentDescription = "DummyRoute4", - Home + Oauth ); companion object { diff --git a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt index 7a81d09f..a195f881 100644 --- a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt +++ b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt @@ -9,8 +9,8 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import androidx.navigation.navOptions -import com.teamsolply.solply.home.navigation.navigateHome import com.teamsolply.solply.oauth.navigation.Oauth +import com.teamsolply.solply.oauth.navigation.navigateOauth internal class MainNavigator( val navController: NavHostController @@ -36,11 +36,8 @@ internal class MainNavigator( } when (tab) { - MainNavTab.HOME -> navController.navigateHome(navOptions) - MainNavTab.DummyRoute1 -> navController.navigateHome(navOptions) - MainNavTab.DummyRoute2 -> navController.navigateHome(navOptions) - MainNavTab.DummyRoute3 -> navController.navigateHome(navOptions) - MainNavTab.DummyRoute4 -> navController.navigateHome(navOptions) + MainNavTab.HOME -> navController.navigateOauth(navOptions) + MainNavTab.DummyRoute1 -> navController.navigateOauth(navOptions) } } diff --git a/feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt b/feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt index ab50be6b..9f9e609a 100644 --- a/feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt +++ b/feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt @@ -12,7 +12,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.navigation.compose.NavHost import com.teamsolply.solply.designsystem.theme.SolplyTheme -import com.teamsolply.solply.home.navigation.homeNavGraph import com.teamsolply.solply.main.component.MainBottomBar import com.teamsolply.solply.oauth.navigation.oauthNavGraph import kotlinx.collections.immutable.toPersistentList @@ -35,7 +34,6 @@ internal fun MainScreen( .fillMaxSize() ) { oauthNavGraph(paddingValues = innerPadding) - homeNavGraph(paddingValues = innerPadding) } }, bottomBar = { diff --git a/feature/maps/.gitignore b/feature/maps/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/feature/maps/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/home/build.gradle.kts b/feature/maps/build.gradle.kts similarity index 58% rename from feature/home/build.gradle.kts rename to feature/maps/build.gradle.kts index b8f203fc..f843bf4c 100644 --- a/feature/home/build.gradle.kts +++ b/feature/maps/build.gradle.kts @@ -3,5 +3,5 @@ plugins { } android { - namespace = "com.teamsolply.solply.home" + namespace = "com.teamsolply.solply.maps" } diff --git a/feature/maps/src/main/AndroidManifest.xml b/feature/maps/src/main/AndroidManifest.xml new file mode 100644 index 00000000..a5918e68 --- /dev/null +++ b/feature/maps/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/feature/mypage/.gitignore b/feature/mypage/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/feature/mypage/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/mypage/build.gradle.kts b/feature/mypage/build.gradle.kts new file mode 100644 index 00000000..b7a7f81a --- /dev/null +++ b/feature/mypage/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + alias(libs.plugins.solply.feature) +} + +android { + namespace = "com.teamsolply.solply.mypage" +} diff --git a/feature/mypage/src/main/AndroidManifest.xml b/feature/mypage/src/main/AndroidManifest.xml new file mode 100644 index 00000000..a5918e68 --- /dev/null +++ b/feature/mypage/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthContract.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt similarity index 88% rename from feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthContract.kt rename to feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt index 028732d9..81caebc1 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthContract.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt @@ -1,4 +1,4 @@ -package com.teamsolply.solply.oauth.presentation +package com.teamsolply.solply.oauth import com.teamsolply.solply.ui.base.SideEffect import com.teamsolply.solply.ui.base.UiIntent diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthScreen.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt similarity index 98% rename from feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthScreen.kt rename to feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt index 4e3fae43..2e1c5245 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthScreen.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt @@ -1,4 +1,4 @@ -package com.teamsolply.solply.oauth.presentation +package com.teamsolply.solply.oauth import android.app.Activity import android.content.Context @@ -19,6 +19,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.kakao.sdk.common.model.ClientError import com.kakao.sdk.common.model.ClientErrorCause import com.kakao.sdk.user.UserApiClient +import com.teamsolply.solply.oauth.OauthViewModel import com.teamsolply.solply.ui.extension.customClickable import com.teamsolply.solply.ui.lifecycle.LaunchedEffectWithLifecycle import kotlinx.coroutines.flow.collectLatest diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthViewModel.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt similarity index 89% rename from feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthViewModel.kt rename to feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt index 993de13f..e36698a6 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthViewModel.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt @@ -1,4 +1,4 @@ -package com.teamsolply.solply.oauth.presentation +package com.teamsolply.solply.oauth import com.teamsolply.solply.ui.base.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel @@ -12,4 +12,4 @@ class OauthViewModel @Inject constructor() : OauthIntent.KakaoLoginClick -> postSideEffect(OauthSideEffect.StartKakaoLogin) } } -} +} \ No newline at end of file diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt index 2ad000fc..f3970b77 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt @@ -6,7 +6,7 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.teamsolply.solply.navigation.Route -import com.teamsolply.solply.oauth.presentation.OauthRoute +import com.teamsolply.solply.oauth.OauthRoute import kotlinx.serialization.Serializable fun NavController.navigateOauth( diff --git a/feature/onboarding/.gitignore b/feature/onboarding/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/feature/onboarding/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/onboarding/build.gradle.kts b/feature/onboarding/build.gradle.kts new file mode 100644 index 00000000..e2b57bcf --- /dev/null +++ b/feature/onboarding/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + alias(libs.plugins.solply.feature) +} + +android { + namespace = "com.teamsolply.solply.onboarding" +} diff --git a/feature/onboarding/src/main/AndroidManifest.xml b/feature/onboarding/src/main/AndroidManifest.xml new file mode 100644 index 00000000..a5918e68 --- /dev/null +++ b/feature/onboarding/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/feature/place/.gitignore b/feature/place/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/feature/place/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/place/build.gradle.kts b/feature/place/build.gradle.kts new file mode 100644 index 00000000..63e29af5 --- /dev/null +++ b/feature/place/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + alias(libs.plugins.solply.feature) +} + +android { + namespace = "com.teamsolply.solply.place" +} diff --git a/feature/place/src/main/AndroidManifest.xml b/feature/place/src/main/AndroidManifest.xml new file mode 100644 index 00000000..a5918e68 --- /dev/null +++ b/feature/place/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 6b97480d..91b7c8aa 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -37,5 +37,9 @@ include(":data") include(":local") include(":remote") include(":feature:main") -include(":feature:home") include(":feature:oauth") +include(":feature:onboarding") +include(":feature:place") +include(":feature:course") +include(":feature:maps") +include(":feature:mypage") From 3b46c4dcef0a7486dc9b3e1e2a7d250cb1c80fd3 Mon Sep 17 00:00:00 2001 From: leeseokchan00 <112953135+leeseokchan00@users.noreply.github.com> Date: Wed, 25 Jun 2025 22:20:28 +0900 Subject: [PATCH 2/4] feature#5 navigation setting --- .../teamsolply/solply/course/CourseScreen.kt | 33 ++++++++++++ .../course/navigation/CourseNavigation.kt | 29 +++++++++++ feature/main/build.gradle.kts | 5 ++ .../com/teamsolply/solply/main/MainNavTab.kt | 17 +++--- .../teamsolply/solply/main/MainNavigator.kt | 20 +++++-- .../com/teamsolply/solply/main/MainScreen.kt | 32 +++++++++++- .../com/teamsolply/solply/maps/MapsScreen.kt | 33 ++++++++++++ .../solply/maps/navigation/MapsNavigation.kt | 29 +++++++++++ .../teamsolply/solply/mypage/MypageScreen.kt | 33 ++++++++++++ .../mypage/navigation/MypageNavigation.kt | 29 +++++++++++ .../teamsolply/solply/oauth/OauthScreen.kt | 2 + .../oauth/navigation/OauthNavigation.kt | 6 ++- .../solply/onboarding/OnBoardingContract.kt | 17 ++++++ .../solply/onboarding/OnBoardingScreen.kt | 52 +++++++++++++++++++ .../solply/onboarding/OnBoardingViewModel.kt | 17 ++++++ .../navigation/OnBoardingNavigation.kt | 31 +++++++++++ .../teamsolply/solply/place/PlaceScreen.kt | 33 ++++++++++++ .../place/navigation/PlaceNavigation.kt | 29 +++++++++++ 18 files changed, 432 insertions(+), 15 deletions(-) create mode 100644 feature/course/src/main/java/com/teamsolply/solply/course/CourseScreen.kt create mode 100644 feature/course/src/main/java/com/teamsolply/solply/course/navigation/CourseNavigation.kt create mode 100644 feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt create mode 100644 feature/maps/src/main/java/com/teamsolply/solply/maps/navigation/MapsNavigation.kt create mode 100644 feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt create mode 100644 feature/mypage/src/main/java/com/teamsolply/solply/mypage/navigation/MypageNavigation.kt create mode 100644 feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt create mode 100644 feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt create mode 100644 feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt create mode 100644 feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt create mode 100644 feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt create mode 100644 feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt diff --git a/feature/course/src/main/java/com/teamsolply/solply/course/CourseScreen.kt b/feature/course/src/main/java/com/teamsolply/solply/course/CourseScreen.kt new file mode 100644 index 00000000..19bd5ac3 --- /dev/null +++ b/feature/course/src/main/java/com/teamsolply/solply/course/CourseScreen.kt @@ -0,0 +1,33 @@ +package com.teamsolply.solply.course + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier + +@Composable +fun CourseRoute( + paddingValues: PaddingValues +) { + CourseScreen() +} + +@Composable +fun CourseScreen( + modifier: Modifier = Modifier + +) { + Column( + modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + "Course" + ) + } +} \ No newline at end of file diff --git a/feature/course/src/main/java/com/teamsolply/solply/course/navigation/CourseNavigation.kt b/feature/course/src/main/java/com/teamsolply/solply/course/navigation/CourseNavigation.kt new file mode 100644 index 00000000..93347b11 --- /dev/null +++ b/feature/course/src/main/java/com/teamsolply/solply/course/navigation/CourseNavigation.kt @@ -0,0 +1,29 @@ +package com.teamsolply.solply.course.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.teamsolply.solply.course.CourseRoute +import com.teamsolply.solply.navigation.Route +import kotlinx.serialization.Serializable + +fun NavController.navigateCourse( + navOptions: NavOptions +) { + navigate(Course, navOptions) +} + +fun NavGraphBuilder.courseNavGraph( + paddingValues: PaddingValues +) { + composable { + CourseRoute( + paddingValues = paddingValues + ) + } +} + +@Serializable +data object Course : Route \ No newline at end of file diff --git a/feature/main/build.gradle.kts b/feature/main/build.gradle.kts index 6411fac1..f2748c28 100644 --- a/feature/main/build.gradle.kts +++ b/feature/main/build.gradle.kts @@ -8,4 +8,9 @@ android { dependencies { implementation(projects.feature.oauth) + implementation(projects.feature.onboarding) + implementation(projects.feature.place) + implementation(projects.feature.course) + implementation(projects.feature.maps) + implementation(projects.feature.mypage) } diff --git a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt index 3293d5fa..dc85db9b 100644 --- a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt +++ b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt @@ -1,24 +1,25 @@ package com.teamsolply.solply.main import androidx.compose.runtime.Composable +import com.teamsolply.solply.course.navigation.Course import com.teamsolply.solply.navigation.Route -import com.teamsolply.solply.oauth.navigation.Oauth +import com.teamsolply.solply.place.navigation.Place internal enum class MainNavTab( val iconResId: Int, internal val contentDescription: String, val route: Route ) { - HOME( + PLACE( iconResId = com.teamsolply.solply.designsystem.R.drawable.ic_bottom_nav_dummy, - contentDescription = "HOME", - Oauth + contentDescription = "PLACE", + Place ), - DummyRoute1( + COURSE( iconResId = com.teamsolply.solply.designsystem.R.drawable.ic_bottom_nav_dummy, - contentDescription = "DummyRoute1", - Oauth - ); + contentDescription = "COURSE", + Course + ),; companion object { @Composable diff --git a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt index a195f881..c36999d8 100644 --- a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt +++ b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt @@ -6,11 +6,14 @@ import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavHostController +import androidx.navigation.NavOptions import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import androidx.navigation.navOptions +import com.teamsolply.solply.course.navigation.navigateCourse import com.teamsolply.solply.oauth.navigation.Oauth -import com.teamsolply.solply.oauth.navigation.navigateOauth +import com.teamsolply.solply.onboarding.navigation.navigateOnBoarding +import com.teamsolply.solply.place.navigation.navigatePlace internal class MainNavigator( val navController: NavHostController @@ -28,7 +31,8 @@ internal class MainNavigator( fun navigate(tab: MainNavTab) { val navOptions = navOptions { - popUpTo(navController.graph.findStartDestination().id) { + popUpTo(navController.graph.id) { + inclusive = false saveState = true } launchSingleTop = true @@ -36,11 +40,19 @@ internal class MainNavigator( } when (tab) { - MainNavTab.HOME -> navController.navigateOauth(navOptions) - MainNavTab.DummyRoute1 -> navController.navigateOauth(navOptions) + MainNavTab.PLACE -> navController.navigatePlace(navOptions) + MainNavTab.COURSE -> navController.navigateCourse(navOptions) } } + fun navigateToOnboarding(navOptions: NavOptions) { + navController.navigateOnBoarding(navOptions) + } + + fun navigateToPlace(navOptions: NavOptions) { + navController.navigatePlace(navOptions) + } + @Composable fun setBottomBarVisibility() = MainNavTab.contains { currentDestination?.hasRoute(it::class) == true diff --git a/feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt b/feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt index 9f9e609a..0637c951 100644 --- a/feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt +++ b/feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt @@ -11,9 +11,15 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.navigation.compose.NavHost +import androidx.navigation.navOptions +import com.teamsolply.solply.course.navigation.courseNavGraph import com.teamsolply.solply.designsystem.theme.SolplyTheme import com.teamsolply.solply.main.component.MainBottomBar +import com.teamsolply.solply.maps.navigation.mapsNavGraph +import com.teamsolply.solply.mypage.navigation.mypageNavGraph import com.teamsolply.solply.oauth.navigation.oauthNavGraph +import com.teamsolply.solply.onboarding.navigation.onBoardingNavGraph +import com.teamsolply.solply.place.navigation.placeNavGraph import kotlinx.collections.immutable.toPersistentList @Composable @@ -33,7 +39,31 @@ internal fun MainScreen( .background(color = SolplyTheme.colors.white) .fillMaxSize() ) { - oauthNavGraph(paddingValues = innerPadding) + oauthNavGraph( + paddingValues = innerPadding, + navigateToOnBoarding = { + val navOptions = navOptions { + launchSingleTop = true + } + navigator.navigateToOnboarding(navOptions) + } + ) + onBoardingNavGraph( + paddingValues = innerPadding, + navigateToPlace = { + val navOptions = navOptions { + popUpTo(0) { + inclusive = true + } + launchSingleTop = true + } + navigator.navigateToPlace(navOptions = navOptions) + } + ) + placeNavGraph(paddingValues = innerPadding) + courseNavGraph(paddingValues = innerPadding) + mypageNavGraph(paddingValues = innerPadding) + mapsNavGraph(paddingValues = innerPadding) } }, bottomBar = { diff --git a/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt b/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt new file mode 100644 index 00000000..43ec9af9 --- /dev/null +++ b/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt @@ -0,0 +1,33 @@ +package com.teamsolply.solply.maps + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier + +@Composable +fun MapsRoute( + paddingValues: PaddingValues +) { + MapsScreen() +} + +@Composable +fun MapsScreen( + modifier: Modifier = Modifier + +) { + Column( + modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + "Maps" + ) + } +} \ No newline at end of file diff --git a/feature/maps/src/main/java/com/teamsolply/solply/maps/navigation/MapsNavigation.kt b/feature/maps/src/main/java/com/teamsolply/solply/maps/navigation/MapsNavigation.kt new file mode 100644 index 00000000..b97cf3ed --- /dev/null +++ b/feature/maps/src/main/java/com/teamsolply/solply/maps/navigation/MapsNavigation.kt @@ -0,0 +1,29 @@ +package com.teamsolply.solply.maps.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.teamsolply.solply.maps.MapsRoute +import com.teamsolply.solply.navigation.Route +import kotlinx.serialization.Serializable + +fun NavController.navigateMaps( + navOptions: NavOptions +) { + navigate(Maps, navOptions) +} + +fun NavGraphBuilder.mapsNavGraph( + paddingValues: PaddingValues +) { + composable { + MapsRoute( + paddingValues = paddingValues + ) + } +} + +@Serializable +data object Maps : Route \ No newline at end of file diff --git a/feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt b/feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt new file mode 100644 index 00000000..b6dea4ed --- /dev/null +++ b/feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt @@ -0,0 +1,33 @@ +package com.teamsolply.solply.mypage + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier + +@Composable +fun MypageRoute( + paddingValues: PaddingValues +) { + MypageScreen() +} + +@Composable +fun MypageScreen( + modifier: Modifier = Modifier + +) { + Column( + modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + "Mypage" + ) + } +} \ No newline at end of file diff --git a/feature/mypage/src/main/java/com/teamsolply/solply/mypage/navigation/MypageNavigation.kt b/feature/mypage/src/main/java/com/teamsolply/solply/mypage/navigation/MypageNavigation.kt new file mode 100644 index 00000000..a0b27c02 --- /dev/null +++ b/feature/mypage/src/main/java/com/teamsolply/solply/mypage/navigation/MypageNavigation.kt @@ -0,0 +1,29 @@ +package com.teamsolply.solply.mypage.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.teamsolply.solply.mypage.MypageRoute +import com.teamsolply.solply.navigation.Route +import kotlinx.serialization.Serializable + +fun NavController.navigateMypage( + navOptions: NavOptions +) { + navigate(Mypage, navOptions) +} + +fun NavGraphBuilder.mypageNavGraph( + paddingValues: PaddingValues +) { + composable { + MypageRoute( + paddingValues = paddingValues + ) + } +} + +@Serializable +data object Mypage : Route \ No newline at end of file diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt index 2e1c5245..31403793 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt @@ -27,6 +27,7 @@ import kotlinx.coroutines.flow.collectLatest @Composable fun OauthRoute( paddingValues: PaddingValues, + navigateToOnBoarding: () -> Unit, viewModel: OauthViewModel = hiltViewModel() ) { val context = LocalContext.current @@ -43,6 +44,7 @@ fun OauthRoute( "asdasdasd", "accessToken: ${accessToken}\n refreshToken: $refreshToken" ) + navigateToOnBoarding() }, onFailure = { error -> Log.d("asdasdasd", error.toString()) diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt index f3970b77..b64fa728 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt @@ -16,11 +16,13 @@ fun NavController.navigateOauth( } fun NavGraphBuilder.oauthNavGraph( - paddingValues: PaddingValues + paddingValues: PaddingValues, + navigateToOnBoarding: () -> Unit, ) { composable { OauthRoute( - paddingValues = paddingValues + paddingValues = paddingValues, + navigateToOnBoarding = navigateToOnBoarding ) } } diff --git a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt new file mode 100644 index 00000000..a760ab22 --- /dev/null +++ b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt @@ -0,0 +1,17 @@ +package com.teamsolply.solply.onboarding + +import com.teamsolply.solply.ui.base.SideEffect +import com.teamsolply.solply.ui.base.UiIntent +import com.teamsolply.solply.ui.base.UiState + +data class OnBoardingState( + val g: String = "" +) : UiState + +sealed interface OnBoardingIntent : UiIntent { + data object OnBoardingButtonClick : OnBoardingIntent +} + +sealed interface OnBoardingSideEffect : SideEffect { + data object NavigateToPlace : OnBoardingSideEffect +} \ No newline at end of file diff --git a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt new file mode 100644 index 00000000..a3e45ed2 --- /dev/null +++ b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt @@ -0,0 +1,52 @@ +package com.teamsolply.solply.onboarding + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.hilt.navigation.compose.hiltViewModel +import com.teamsolply.solply.ui.extension.customClickable +import com.teamsolply.solply.ui.lifecycle.LaunchedEffectWithLifecycle +import kotlinx.coroutines.flow.collectLatest + +@Composable +fun OnBoardingRoute( + paddingValues: PaddingValues, + navigateToPlace: () -> Unit, + viewModel: OnBoardingViewModel = hiltViewModel() +) { + LaunchedEffectWithLifecycle { + viewModel.sideEffect.collectLatest { sideEffect -> + when (sideEffect) { + OnBoardingSideEffect.NavigateToPlace -> navigateToPlace() + } + } + } + + OnBoardingScreen( + onBoardingButtonClick = { viewModel.sendIntent(OnBoardingIntent.OnBoardingButtonClick) } + ) +} + +@Composable +fun OnBoardingScreen( + onBoardingButtonClick: () -> Unit, + modifier: Modifier = Modifier +) { + Column( + modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = "onboarding", + modifier = Modifier.customClickable( + onClick = onBoardingButtonClick + ) + ) + } +} \ No newline at end of file diff --git a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt new file mode 100644 index 00000000..24cdd99e --- /dev/null +++ b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt @@ -0,0 +1,17 @@ +package com.teamsolply.solply.onboarding + +import com.teamsolply.solply.ui.base.BaseViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class OnBoardingViewModel @Inject constructor() : + BaseViewModel( + OnBoardingState() + ) { + override fun handleIntent(intent: OnBoardingIntent) { + when (intent) { + OnBoardingIntent.OnBoardingButtonClick -> postSideEffect(OnBoardingSideEffect.NavigateToPlace) + } + } +} \ No newline at end of file diff --git a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt new file mode 100644 index 00000000..20f423be --- /dev/null +++ b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt @@ -0,0 +1,31 @@ +package com.teamsolply.solply.onboarding.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.teamsolply.solply.navigation.Route +import com.teamsolply.solply.onboarding.OnBoardingRoute +import kotlinx.serialization.Serializable + +fun NavController.navigateOnBoarding( + navOptions: NavOptions +) { + navigate(OnBoarding, navOptions) +} + +fun NavGraphBuilder.onBoardingNavGraph( + paddingValues: PaddingValues, + navigateToPlace: () -> Unit, +) { + composable { + OnBoardingRoute( + paddingValues = paddingValues, + navigateToPlace = navigateToPlace + ) + } +} + +@Serializable +data object OnBoarding : Route \ No newline at end of file diff --git a/feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt b/feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt new file mode 100644 index 00000000..caf3fb04 --- /dev/null +++ b/feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt @@ -0,0 +1,33 @@ +package com.teamsolply.solply.place + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier + +@Composable +fun PlaceRoute( + paddingValues: PaddingValues +) { + PlaceScreen() +} + +@Composable +fun PlaceScreen( + modifier: Modifier = Modifier + +) { + Column( + modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + "Place" + ) + } +} \ No newline at end of file diff --git a/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt b/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt new file mode 100644 index 00000000..d3f5f12f --- /dev/null +++ b/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt @@ -0,0 +1,29 @@ +package com.teamsolply.solply.place.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.teamsolply.solply.navigation.MainTabRoute +import com.teamsolply.solply.place.PlaceRoute +import kotlinx.serialization.Serializable + +fun NavController.navigatePlace( + navOptions: NavOptions +) { + navigate(Place, navOptions) +} + +fun NavGraphBuilder.placeNavGraph( + paddingValues: PaddingValues +) { + composable { + PlaceRoute( + paddingValues = paddingValues + ) + } +} + +@Serializable +data object Place : MainTabRoute \ No newline at end of file From 7bfe425467b930eb17e7b5a49c520462633b0fd1 Mon Sep 17 00:00:00 2001 From: leeseokchan00 <112953135+leeseokchan00@users.noreply.github.com> Date: Thu, 26 Jun 2025 00:29:42 +0900 Subject: [PATCH 3/4] feature#5 add oauth data, domain module --- .github/workflows/android-pull-request-ci.yml | 31 ------------------- app/build.gradle.kts | 14 +++++++-- .../SolplySecureDataStoreSerializer.kt | 17 +++++----- ...{SolplyLocalData.kt => SolplyTokenData.kt} | 6 ++-- .../solply/datastore/di/DataStoreModule.kt | 6 ++-- data/build.gradle.kts | 19 ------------ data/oauth/.gitignore | 1 + data/oauth/build.gradle.kts | 12 +++++++ .../solply/oauth/di/OauthDataModule.kt | 17 ++++++++++ .../oauth/repository/OauthRepositoryImpl.kt | 19 ++++++++++++ .../oauth/source/OauthLocalDataSource.kt | 8 +++++ .../teamsolply/solply/dummy/data/DummyData.kt | 3 -- domain/oauth/.gitignore | 1 + domain/{ => oauth}/build.gradle.kts | 2 +- .../solply/oauth/model/TokenEntity.kt | 6 ++++ .../oauth/repository/OauthRepository.kt | 7 +++++ .../solply/dummy/model/DummyModel.kt | 5 --- .../dummy/repository/DummyRepository.kt | 3 -- .../solply/dummy/usecase/DummyUseCase.kt | 3 -- feature/oauth/build.gradle.kts | 1 + .../teamsolply/solply/oauth/OauthContract.kt | 3 ++ .../teamsolply/solply/oauth/OauthScreen.kt | 11 +++++-- .../teamsolply/solply/oauth/OauthViewModel.kt | 31 ++++++++++++++++++- local/consumer-rules.pro | 0 local/oauth/.gitignore | 1 + local/{ => oauth}/build.gradle.kts | 6 ++-- .../datasource/OauthLocalDataSourceImpl.kt | 14 +++++++++ .../solply/oauth/di/AuthLocalDataModule.kt | 17 ++++++++++ local/proguard-rules.pro | 21 ------------- local/src/main/AndroidManifest.xml | 4 --- .../solply/dummy/local/DummyLocalData.kt | 3 -- remote/build.gradle.kts | 1 - settings.gradle.kts | 6 ++-- 33 files changed, 176 insertions(+), 123 deletions(-) delete mode 100644 .github/workflows/android-pull-request-ci.yml rename core/datastore/src/main/java/com/teamsolply/solply/datastore/{SolplyLocalData.kt => SolplyTokenData.kt} (55%) delete mode 100644 data/build.gradle.kts create mode 100644 data/oauth/.gitignore create mode 100644 data/oauth/build.gradle.kts create mode 100644 data/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthDataModule.kt create mode 100644 data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt create mode 100644 data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt delete mode 100644 data/src/main/java/com/teamsolply/solply/dummy/data/DummyData.kt create mode 100644 domain/oauth/.gitignore rename domain/{ => oauth}/build.gradle.kts (98%) create mode 100644 domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt create mode 100644 domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt delete mode 100644 domain/src/main/java/com/teamsolply/solply/dummy/model/DummyModel.kt delete mode 100644 domain/src/main/java/com/teamsolply/solply/dummy/repository/DummyRepository.kt delete mode 100644 domain/src/main/java/com/teamsolply/solply/dummy/usecase/DummyUseCase.kt delete mode 100644 local/consumer-rules.pro create mode 100644 local/oauth/.gitignore rename local/{ => oauth}/build.gradle.kts (70%) create mode 100644 local/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthLocalDataSourceImpl.kt create mode 100644 local/oauth/src/main/java/com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt delete mode 100644 local/proguard-rules.pro delete mode 100644 local/src/main/AndroidManifest.xml delete mode 100644 local/src/main/java/com/teamsolply/solply/dummy/local/DummyLocalData.kt diff --git a/.github/workflows/android-pull-request-ci.yml b/.github/workflows/android-pull-request-ci.yml deleted file mode 100644 index c9bccc6a..00000000 --- a/.github/workflows/android-pull-request-ci.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Android Pull Request CI -on: - pull_request: - branches: [ develop ] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout the code - uses: actions/checkout@v3 - - - name: Setup JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'corretto' - java-version: '17' - - - name: Setup Android SDK - uses: android-actions/setup-android@v2 - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Create local.properties with base.url and kakao.native.key - run: | - echo "base.url=https://ci-placeholder.local" >> local.properties - echo "kakao.native.key=${{ secrets.KAKAO_NATIVE_KEY }}" >> local.properties - - - name: Run ktlint - run: ./gradlew ktlintCheck \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c6c1b976..0902d6d4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -16,11 +16,19 @@ dependencies { implementation(projects.core.network) implementation(projects.core.navigation) - implementation(projects.data) - implementation(projects.local) + implementation(projects.domain.oauth) + + implementation(projects.data.oauth) + implementation(projects.local.oauth) implementation(projects.remote) - implementation(projects.domain) + implementation(projects.feature.main) + implementation(projects.feature.oauth) + implementation(projects.feature.onboarding) + implementation(projects.feature.place) + implementation(projects.feature.course) + implementation(projects.feature.mypage) + implementation(projects.feature.maps) implementation(libs.kakao.login) } diff --git a/core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplySecureDataStoreSerializer.kt b/core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplySecureDataStoreSerializer.kt index c514a5ec..7380e5ee 100644 --- a/core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplySecureDataStoreSerializer.kt +++ b/core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplySecureDataStoreSerializer.kt @@ -3,7 +3,6 @@ package com.teamsolply.solply.datastore import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyProperties import androidx.datastore.core.Serializer -import kotlinx.serialization.InternalSerializationApi import kotlinx.serialization.json.Json import java.io.InputStream import java.io.OutputStream @@ -12,9 +11,9 @@ import javax.crypto.Cipher import javax.crypto.KeyGenerator import javax.crypto.SecretKey import javax.crypto.spec.GCMParameterSpec +import javax.inject.Inject -@OptIn(InternalSerializationApi::class) -class SolplySecureDataStoreSerializer : Serializer { +class SolplySecureDataStoreSerializer @Inject constructor() : Serializer { companion object { private const val KEYSTORE_PROVIDER = "AndroidKeyStore" private const val KEY_ALIAS = "data-store-key" @@ -49,10 +48,10 @@ class SolplySecureDataStoreSerializer : Serializer { keyGenerator.generateKey() } - override val defaultValue: SolplyLocalData - get() = SolplyLocalData() + override val defaultValue: SolplyTokenData + get() = SolplyTokenData() - override suspend fun readFrom(input: InputStream): SolplyLocalData { + override suspend fun readFrom(input: InputStream): SolplyTokenData { return try { val encryptedDataWithIv = input.readBytes() if (encryptedDataWithIv.size < IV_SIZE) { @@ -69,7 +68,7 @@ class SolplySecureDataStoreSerializer : Serializer { val decryptedBytes = cipher.doFinal(encryptedData) Json.decodeFromString( - deserializer = SolplyLocalData.serializer(), + deserializer = SolplyTokenData.serializer(), string = decryptedBytes.decodeToString() ) } catch (e: Exception) { @@ -78,10 +77,10 @@ class SolplySecureDataStoreSerializer : Serializer { } } - override suspend fun writeTo(t: SolplyLocalData, output: OutputStream) { + override suspend fun writeTo(t: SolplyTokenData, output: OutputStream) { try { val serializedData = Json.encodeToString( - serializer = SolplyLocalData.serializer(), + serializer = SolplyTokenData.serializer(), value = t ) diff --git a/core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplyLocalData.kt b/core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplyTokenData.kt similarity index 55% rename from core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplyLocalData.kt rename to core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplyTokenData.kt index 1c2c8d7a..119bd8b3 100644 --- a/core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplyLocalData.kt +++ b/core/datastore/src/main/java/com/teamsolply/solply/datastore/SolplyTokenData.kt @@ -1,10 +1,10 @@ package com.teamsolply.solply.datastore -import kotlinx.serialization.InternalSerializationApi import kotlinx.serialization.Serializable -@InternalSerializationApi @Serializable -data class SolplyLocalData( +data class SolplyTokenData( + val accessToken: String = "", + val refreshToken: String = "", val autoSignIn: Boolean = false ) diff --git a/core/datastore/src/main/java/com/teamsolply/solply/datastore/di/DataStoreModule.kt b/core/datastore/src/main/java/com/teamsolply/solply/datastore/di/DataStoreModule.kt index f5ba615f..13561cde 100644 --- a/core/datastore/src/main/java/com/teamsolply/solply/datastore/di/DataStoreModule.kt +++ b/core/datastore/src/main/java/com/teamsolply/solply/datastore/di/DataStoreModule.kt @@ -4,26 +4,24 @@ import android.content.Context import androidx.datastore.core.DataStore import androidx.datastore.core.DataStoreFactory import androidx.datastore.dataStoreFile -import com.teamsolply.solply.datastore.SolplyLocalData import com.teamsolply.solply.datastore.SolplySecureDataStoreSerializer +import com.teamsolply.solply.datastore.SolplyTokenData import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import kotlinx.serialization.InternalSerializationApi import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object DataStoreModule { - @OptIn(InternalSerializationApi::class) @Provides @Singleton fun providesDataStore( @ApplicationContext context: Context, solplySecureDataStoreSerializer: SolplySecureDataStoreSerializer - ): DataStore = + ): DataStore = DataStoreFactory.create( serializer = solplySecureDataStoreSerializer ) { diff --git a/data/build.gradle.kts b/data/build.gradle.kts deleted file mode 100644 index c115525b..00000000 --- a/data/build.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -plugins { - alias(libs.plugins.solply.data) - alias(libs.plugins.kotlin.serialization) -} - -android { - namespace = "com.teamsolply.solply" -} - -dependencies { - implementation(projects.core.network) - implementation(projects.core.model) - implementation(projects.core.datastore) - implementation(projects.domain) - implementation(libs.kotlinx.serialization.json) - implementation(libs.retrofit.core) - implementation(libs.retrofit.kotlin.serialization) - implementation(libs.okhttp.logging) -} diff --git a/data/oauth/.gitignore b/data/oauth/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/data/oauth/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/data/oauth/build.gradle.kts b/data/oauth/build.gradle.kts new file mode 100644 index 00000000..0f47fc4b --- /dev/null +++ b/data/oauth/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + alias(libs.plugins.solply.data) +} + +android { + namespace = "com.teamsolply.solply.oauth" +} + +dependencies { + implementation(projects.core.datastore) + implementation(projects.domain.oauth) +} \ No newline at end of file diff --git a/data/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthDataModule.kt b/data/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthDataModule.kt new file mode 100644 index 00000000..07cdce5f --- /dev/null +++ b/data/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthDataModule.kt @@ -0,0 +1,17 @@ +package com.teamsolply.solply.oauth.di + +import com.teamsolply.solply.oauth.repository.OauthRepository +import com.teamsolply.solply.oauth.repository.OauthRepositoryImpl +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class OauthDataModule { + @Binds + @Singleton + abstract fun bindsOauthRepository(oauthRepositoryImpl: OauthRepositoryImpl): OauthRepository +} \ No newline at end of file diff --git a/data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt b/data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt new file mode 100644 index 00000000..2e0e84d8 --- /dev/null +++ b/data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt @@ -0,0 +1,19 @@ +package com.teamsolply.solply.oauth.repository + +import com.teamsolply.solply.datastore.SolplyTokenData +import com.teamsolply.solply.oauth.model.TokenEntity +import com.teamsolply.solply.oauth.source.OauthLocalDataSource +import javax.inject.Inject + +class OauthRepositoryImpl @Inject constructor( + private val oauthLocalDataSource: OauthLocalDataSource +) : OauthRepository { + override suspend fun saveJwtToken(jwtToken: TokenEntity): Result = runCatching { + oauthLocalDataSource.setAuthLocalData( + jwtToken = SolplyTokenData( + accessToken = jwtToken.accessToken, + refreshToken = jwtToken.refreshToken + ) + ) + } +} \ No newline at end of file diff --git a/data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt b/data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt new file mode 100644 index 00000000..2ea2ffcc --- /dev/null +++ b/data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt @@ -0,0 +1,8 @@ +package com.teamsolply.solply.oauth.source + +import com.teamsolply.solply.datastore.SolplyTokenData +import kotlinx.coroutines.flow.Flow + +interface OauthLocalDataSource { + suspend fun setAuthLocalData(jwtToken: SolplyTokenData) +} \ No newline at end of file diff --git a/data/src/main/java/com/teamsolply/solply/dummy/data/DummyData.kt b/data/src/main/java/com/teamsolply/solply/dummy/data/DummyData.kt deleted file mode 100644 index e3de6f5b..00000000 --- a/data/src/main/java/com/teamsolply/solply/dummy/data/DummyData.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.teamsolply.solply.dummy.data - -class DummyData diff --git a/domain/oauth/.gitignore b/domain/oauth/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/domain/oauth/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/domain/build.gradle.kts b/domain/oauth/build.gradle.kts similarity index 98% rename from domain/build.gradle.kts rename to domain/oauth/build.gradle.kts index 7f643ef7..2fb9e4a5 100644 --- a/domain/build.gradle.kts +++ b/domain/oauth/build.gradle.kts @@ -5,4 +5,4 @@ plugins { dependencies { implementation(projects.core.model) implementation(libs.bundles.coroutine) -} +} \ No newline at end of file diff --git a/domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt b/domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt new file mode 100644 index 00000000..1a87ce9e --- /dev/null +++ b/domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt @@ -0,0 +1,6 @@ +package com.teamsolply.solply.oauth.model + +data class TokenEntity( + val accessToken: String, + val refreshToken: String, +) diff --git a/domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt b/domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt new file mode 100644 index 00000000..6ed9720b --- /dev/null +++ b/domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt @@ -0,0 +1,7 @@ +package com.teamsolply.solply.oauth.repository + +import com.teamsolply.solply.oauth.model.TokenEntity + +interface OauthRepository { + suspend fun saveJwtToken(jwtToken: TokenEntity): Result +} \ No newline at end of file diff --git a/domain/src/main/java/com/teamsolply/solply/dummy/model/DummyModel.kt b/domain/src/main/java/com/teamsolply/solply/dummy/model/DummyModel.kt deleted file mode 100644 index 169bbed3..00000000 --- a/domain/src/main/java/com/teamsolply/solply/dummy/model/DummyModel.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.teamsolply.solply.dummy.model - -data class DummyModel( - val good: Int -) diff --git a/domain/src/main/java/com/teamsolply/solply/dummy/repository/DummyRepository.kt b/domain/src/main/java/com/teamsolply/solply/dummy/repository/DummyRepository.kt deleted file mode 100644 index 7ba82149..00000000 --- a/domain/src/main/java/com/teamsolply/solply/dummy/repository/DummyRepository.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.teamsolply.solply.dummy.repository - -interface DummyRepository diff --git a/domain/src/main/java/com/teamsolply/solply/dummy/usecase/DummyUseCase.kt b/domain/src/main/java/com/teamsolply/solply/dummy/usecase/DummyUseCase.kt deleted file mode 100644 index a2b83e5e..00000000 --- a/domain/src/main/java/com/teamsolply/solply/dummy/usecase/DummyUseCase.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.teamsolply.solply.dummy.usecase - -interface DummyUseCase diff --git a/feature/oauth/build.gradle.kts b/feature/oauth/build.gradle.kts index 75fcbced..10e4b72a 100644 --- a/feature/oauth/build.gradle.kts +++ b/feature/oauth/build.gradle.kts @@ -8,4 +8,5 @@ android { dependencies { implementation(libs.kakao.login) + implementation(projects.domain.oauth) } diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt index 81caebc1..eacd739a 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt @@ -10,8 +10,11 @@ data class OauthState( sealed interface OauthIntent : UiIntent { data object KakaoLoginClick : OauthIntent + data class KakaoLoginSuccess(val accessToken: String, val refreshToken: String?) : OauthIntent + data class KakaoLoginFailure(val error: Throwable) : OauthIntent } sealed interface OauthSideEffect : SideEffect { data object StartKakaoLogin : OauthSideEffect + data object NavigateToOnBoarding : OauthSideEffect } diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt index 31403793..a128cda3 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt @@ -19,7 +19,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.kakao.sdk.common.model.ClientError import com.kakao.sdk.common.model.ClientErrorCause import com.kakao.sdk.user.UserApiClient -import com.teamsolply.solply.oauth.OauthViewModel import com.teamsolply.solply.ui.extension.customClickable import com.teamsolply.solply.ui.lifecycle.LaunchedEffectWithLifecycle import kotlinx.coroutines.flow.collectLatest @@ -39,17 +38,23 @@ fun OauthRoute( OauthSideEffect.StartKakaoLogin -> startKakaoLogin( context = context, onSuccess = { accessToken, refreshToken -> - Toast.makeText(context, "로그인 성공", Toast.LENGTH_SHORT).show() + viewModel.sendIntent( + OauthIntent.KakaoLoginSuccess( + accessToken = accessToken, + refreshToken = refreshToken + ) + ) Log.d( "asdasdasd", "accessToken: ${accessToken}\n refreshToken: $refreshToken" ) - navigateToOnBoarding() }, onFailure = { error -> Log.d("asdasdasd", error.toString()) } ) + + OauthSideEffect.NavigateToOnBoarding -> navigateToOnBoarding() } } } diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt index e36698a6..cc07b2fd 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt @@ -1,15 +1,44 @@ package com.teamsolply.solply.oauth +import androidx.lifecycle.viewModelScope +import com.teamsolply.solply.oauth.model.TokenEntity +import com.teamsolply.solply.oauth.repository.OauthRepository import com.teamsolply.solply.ui.base.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class OauthViewModel @Inject constructor() : +class OauthViewModel @Inject constructor( + private val oauthRepository: OauthRepository +) : BaseViewModel(OauthState()) { override fun handleIntent(intent: OauthIntent) { when (intent) { OauthIntent.KakaoLoginClick -> postSideEffect(OauthSideEffect.StartKakaoLogin) + is OauthIntent.KakaoLoginSuccess -> saveJwtToken( + intent.accessToken, + intent.refreshToken + ) + + is OauthIntent.KakaoLoginFailure -> { + TODO() + } + } + } + + private fun saveJwtToken(accessToken: String, refreshToken: String?) { + viewModelScope.launch { + refreshToken?.let { checkedRefreshToken -> + val token = TokenEntity( + accessToken = accessToken, + refreshToken = checkedRefreshToken + ) + oauthRepository.saveJwtToken(token) + .onSuccess { + postSideEffect(OauthSideEffect.NavigateToOnBoarding) + } + } } } } \ No newline at end of file diff --git a/local/consumer-rules.pro b/local/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/local/oauth/.gitignore b/local/oauth/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/local/oauth/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/local/build.gradle.kts b/local/oauth/build.gradle.kts similarity index 70% rename from local/build.gradle.kts rename to local/oauth/build.gradle.kts index 2e818502..37bc7f38 100644 --- a/local/build.gradle.kts +++ b/local/oauth/build.gradle.kts @@ -3,12 +3,12 @@ plugins { } android { - namespace = "com.teamsolply.solply" + namespace = "com.teamsolply.solply.oauth" } dependencies { implementation(projects.core.model) implementation(projects.core.datastore) - implementation(projects.data) + implementation(projects.data.oauth) implementation(libs.bundles.datastore) -} +} \ No newline at end of file diff --git a/local/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthLocalDataSourceImpl.kt b/local/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthLocalDataSourceImpl.kt new file mode 100644 index 00000000..bafcd82d --- /dev/null +++ b/local/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthLocalDataSourceImpl.kt @@ -0,0 +1,14 @@ +package com.teamsolply.solply.oauth.datasource + +import androidx.datastore.core.DataStore +import com.teamsolply.solply.datastore.SolplyTokenData +import com.teamsolply.solply.oauth.source.OauthLocalDataSource +import javax.inject.Inject + +class OauthLocalDataSourceImpl @Inject constructor( + private val oauthLocalDataSource: DataStore, +) : OauthLocalDataSource { + override suspend fun setAuthLocalData(jwtToken: SolplyTokenData) { + oauthLocalDataSource.updateData { jwtToken } + } +} \ No newline at end of file diff --git a/local/oauth/src/main/java/com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt b/local/oauth/src/main/java/com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt new file mode 100644 index 00000000..86dca9db --- /dev/null +++ b/local/oauth/src/main/java/com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt @@ -0,0 +1,17 @@ +package com.teamsolply.solply.oauth.di + +import com.teamsolply.solply.oauth.datasource.OauthLocalDataSourceImpl +import com.teamsolply.solply.oauth.source.OauthLocalDataSource +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class AuthLocalDataModule { + @Binds + @Singleton + abstract fun bindsOauthLocalDataSource(authLocalDataSource: OauthLocalDataSourceImpl): OauthLocalDataSource +} \ No newline at end of file diff --git a/local/proguard-rules.pro b/local/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/local/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/local/src/main/AndroidManifest.xml b/local/src/main/AndroidManifest.xml deleted file mode 100644 index a5918e68..00000000 --- a/local/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/local/src/main/java/com/teamsolply/solply/dummy/local/DummyLocalData.kt b/local/src/main/java/com/teamsolply/solply/dummy/local/DummyLocalData.kt deleted file mode 100644 index 31291912..00000000 --- a/local/src/main/java/com/teamsolply/solply/dummy/local/DummyLocalData.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.teamsolply.solply.dummy.local - -class DummyLocalData diff --git a/remote/build.gradle.kts b/remote/build.gradle.kts index 09f06f7c..aa8c2828 100644 --- a/remote/build.gradle.kts +++ b/remote/build.gradle.kts @@ -9,7 +9,6 @@ android { dependencies { implementation(projects.core.network) implementation(projects.core.model) - implementation(projects.data) implementation(libs.kotlinx.serialization.json) implementation(libs.retrofit.core) implementation(libs.retrofit.kotlin.serialization) diff --git a/settings.gradle.kts b/settings.gradle.kts index 91b7c8aa..59ba70f4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -32,9 +32,9 @@ include(":core:ui") include(":core:network") include(":core:datastore") include(":core:navigation") -include(":domain") -include(":data") -include(":local") +include(":domain:oauth") +include(":data:oauth") +include(":local:oauth") include(":remote") include(":feature:main") include(":feature:oauth") From 449950d75029288ea8005248cbf52afbd9fae741 Mon Sep 17 00:00:00 2001 From: leeseokchan00 <112953135+leeseokchan00@users.noreply.github.com> Date: Thu, 26 Jun 2025 00:40:11 +0900 Subject: [PATCH 4/4] chore#5 ktlint format --- data/oauth/build.gradle.kts | 2 +- .../java/com/teamsolply/solply/oauth/di/OauthDataModule.kt | 2 +- .../teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt | 2 +- .../teamsolply/solply/oauth/source/OauthLocalDataSource.kt | 3 +-- domain/oauth/build.gradle.kts | 2 +- .../java/com/teamsolply/solply/oauth/model/TokenEntity.kt | 2 +- .../com/teamsolply/solply/oauth/repository/OauthRepository.kt | 2 +- .../main/java/com/teamsolply/solply/course/CourseScreen.kt | 2 +- .../teamsolply/solply/course/navigation/CourseNavigation.kt | 2 +- .../src/main/java/com/teamsolply/solply/main/MainNavTab.kt | 2 +- .../src/main/java/com/teamsolply/solply/main/MainNavigator.kt | 1 - .../src/main/java/com/teamsolply/solply/maps/MapsScreen.kt | 2 +- .../com/teamsolply/solply/maps/navigation/MapsNavigation.kt | 2 +- .../main/java/com/teamsolply/solply/mypage/MypageScreen.kt | 2 +- .../teamsolply/solply/mypage/navigation/MypageNavigation.kt | 2 +- .../main/java/com/teamsolply/solply/oauth/OauthViewModel.kt | 2 +- .../com/teamsolply/solply/oauth/navigation/OauthNavigation.kt | 2 +- .../com/teamsolply/solply/onboarding/OnBoardingContract.kt | 2 +- .../java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt | 2 +- .../com/teamsolply/solply/onboarding/OnBoardingViewModel.kt | 2 +- .../solply/onboarding/navigation/OnBoardingNavigation.kt | 4 ++-- .../src/main/java/com/teamsolply/solply/place/PlaceScreen.kt | 2 +- .../com/teamsolply/solply/place/navigation/PlaceNavigation.kt | 2 +- local/oauth/build.gradle.kts | 2 +- .../solply/oauth/datasource/OauthLocalDataSourceImpl.kt | 4 ++-- .../com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt | 2 +- 26 files changed, 27 insertions(+), 29 deletions(-) diff --git a/data/oauth/build.gradle.kts b/data/oauth/build.gradle.kts index 0f47fc4b..9b7929d1 100644 --- a/data/oauth/build.gradle.kts +++ b/data/oauth/build.gradle.kts @@ -9,4 +9,4 @@ android { dependencies { implementation(projects.core.datastore) implementation(projects.domain.oauth) -} \ No newline at end of file +} diff --git a/data/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthDataModule.kt b/data/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthDataModule.kt index 07cdce5f..e74cf539 100644 --- a/data/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthDataModule.kt +++ b/data/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthDataModule.kt @@ -14,4 +14,4 @@ abstract class OauthDataModule { @Binds @Singleton abstract fun bindsOauthRepository(oauthRepositoryImpl: OauthRepositoryImpl): OauthRepository -} \ No newline at end of file +} diff --git a/data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt b/data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt index 2e0e84d8..45bfa10d 100644 --- a/data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt +++ b/data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt @@ -16,4 +16,4 @@ class OauthRepositoryImpl @Inject constructor( ) ) } -} \ No newline at end of file +} diff --git a/data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt b/data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt index 2ea2ffcc..5fdf5eff 100644 --- a/data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt +++ b/data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt @@ -1,8 +1,7 @@ package com.teamsolply.solply.oauth.source import com.teamsolply.solply.datastore.SolplyTokenData -import kotlinx.coroutines.flow.Flow interface OauthLocalDataSource { suspend fun setAuthLocalData(jwtToken: SolplyTokenData) -} \ No newline at end of file +} diff --git a/domain/oauth/build.gradle.kts b/domain/oauth/build.gradle.kts index 2fb9e4a5..7f643ef7 100644 --- a/domain/oauth/build.gradle.kts +++ b/domain/oauth/build.gradle.kts @@ -5,4 +5,4 @@ plugins { dependencies { implementation(projects.core.model) implementation(libs.bundles.coroutine) -} \ No newline at end of file +} diff --git a/domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt b/domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt index 1a87ce9e..67ca7e04 100644 --- a/domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt +++ b/domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt @@ -2,5 +2,5 @@ package com.teamsolply.solply.oauth.model data class TokenEntity( val accessToken: String, - val refreshToken: String, + val refreshToken: String ) diff --git a/domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt b/domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt index 6ed9720b..b21cd4f7 100644 --- a/domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt +++ b/domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt @@ -4,4 +4,4 @@ import com.teamsolply.solply.oauth.model.TokenEntity interface OauthRepository { suspend fun saveJwtToken(jwtToken: TokenEntity): Result -} \ No newline at end of file +} diff --git a/feature/course/src/main/java/com/teamsolply/solply/course/CourseScreen.kt b/feature/course/src/main/java/com/teamsolply/solply/course/CourseScreen.kt index 19bd5ac3..58aca823 100644 --- a/feature/course/src/main/java/com/teamsolply/solply/course/CourseScreen.kt +++ b/feature/course/src/main/java/com/teamsolply/solply/course/CourseScreen.kt @@ -30,4 +30,4 @@ fun CourseScreen( "Course" ) } -} \ No newline at end of file +} diff --git a/feature/course/src/main/java/com/teamsolply/solply/course/navigation/CourseNavigation.kt b/feature/course/src/main/java/com/teamsolply/solply/course/navigation/CourseNavigation.kt index 93347b11..e32c8d10 100644 --- a/feature/course/src/main/java/com/teamsolply/solply/course/navigation/CourseNavigation.kt +++ b/feature/course/src/main/java/com/teamsolply/solply/course/navigation/CourseNavigation.kt @@ -26,4 +26,4 @@ fun NavGraphBuilder.courseNavGraph( } @Serializable -data object Course : Route \ No newline at end of file +data object Course : Route diff --git a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt index dc85db9b..53e3fa11 100644 --- a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt +++ b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavTab.kt @@ -19,7 +19,7 @@ internal enum class MainNavTab( iconResId = com.teamsolply.solply.designsystem.R.drawable.ic_bottom_nav_dummy, contentDescription = "COURSE", Course - ),; + ) ; companion object { @Composable diff --git a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt index c36999d8..c92fd8ff 100644 --- a/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt +++ b/feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt @@ -4,7 +4,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hasRoute -import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavHostController import androidx.navigation.NavOptions import androidx.navigation.compose.currentBackStackEntryAsState diff --git a/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt b/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt index 43ec9af9..2f3c6d43 100644 --- a/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt +++ b/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt @@ -30,4 +30,4 @@ fun MapsScreen( "Maps" ) } -} \ No newline at end of file +} diff --git a/feature/maps/src/main/java/com/teamsolply/solply/maps/navigation/MapsNavigation.kt b/feature/maps/src/main/java/com/teamsolply/solply/maps/navigation/MapsNavigation.kt index b97cf3ed..6346c4cb 100644 --- a/feature/maps/src/main/java/com/teamsolply/solply/maps/navigation/MapsNavigation.kt +++ b/feature/maps/src/main/java/com/teamsolply/solply/maps/navigation/MapsNavigation.kt @@ -26,4 +26,4 @@ fun NavGraphBuilder.mapsNavGraph( } @Serializable -data object Maps : Route \ No newline at end of file +data object Maps : Route diff --git a/feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt b/feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt index b6dea4ed..c356aade 100644 --- a/feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt +++ b/feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt @@ -30,4 +30,4 @@ fun MypageScreen( "Mypage" ) } -} \ No newline at end of file +} diff --git a/feature/mypage/src/main/java/com/teamsolply/solply/mypage/navigation/MypageNavigation.kt b/feature/mypage/src/main/java/com/teamsolply/solply/mypage/navigation/MypageNavigation.kt index a0b27c02..3c9cd782 100644 --- a/feature/mypage/src/main/java/com/teamsolply/solply/mypage/navigation/MypageNavigation.kt +++ b/feature/mypage/src/main/java/com/teamsolply/solply/mypage/navigation/MypageNavigation.kt @@ -26,4 +26,4 @@ fun NavGraphBuilder.mypageNavGraph( } @Serializable -data object Mypage : Route \ No newline at end of file +data object Mypage : Route diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt index cc07b2fd..dbd02985 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt @@ -41,4 +41,4 @@ class OauthViewModel @Inject constructor( } } } -} \ No newline at end of file +} diff --git a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt index b64fa728..896561aa 100644 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt @@ -17,7 +17,7 @@ fun NavController.navigateOauth( fun NavGraphBuilder.oauthNavGraph( paddingValues: PaddingValues, - navigateToOnBoarding: () -> Unit, + navigateToOnBoarding: () -> Unit ) { composable { OauthRoute( diff --git a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt index a760ab22..1d8067ab 100644 --- a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt +++ b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt @@ -14,4 +14,4 @@ sealed interface OnBoardingIntent : UiIntent { sealed interface OnBoardingSideEffect : SideEffect { data object NavigateToPlace : OnBoardingSideEffect -} \ No newline at end of file +} diff --git a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt index a3e45ed2..77b02793 100644 --- a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt +++ b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt @@ -49,4 +49,4 @@ fun OnBoardingScreen( ) ) } -} \ No newline at end of file +} diff --git a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt index 24cdd99e..937da65a 100644 --- a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt @@ -14,4 +14,4 @@ class OnBoardingViewModel @Inject constructor() : OnBoardingIntent.OnBoardingButtonClick -> postSideEffect(OnBoardingSideEffect.NavigateToPlace) } } -} \ No newline at end of file +} diff --git a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt index 20f423be..355a8ac3 100644 --- a/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt +++ b/feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt @@ -17,7 +17,7 @@ fun NavController.navigateOnBoarding( fun NavGraphBuilder.onBoardingNavGraph( paddingValues: PaddingValues, - navigateToPlace: () -> Unit, + navigateToPlace: () -> Unit ) { composable { OnBoardingRoute( @@ -28,4 +28,4 @@ fun NavGraphBuilder.onBoardingNavGraph( } @Serializable -data object OnBoarding : Route \ No newline at end of file +data object OnBoarding : Route diff --git a/feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt b/feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt index caf3fb04..af639509 100644 --- a/feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt +++ b/feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt @@ -30,4 +30,4 @@ fun PlaceScreen( "Place" ) } -} \ No newline at end of file +} diff --git a/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt b/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt index d3f5f12f..b6ed18ab 100644 --- a/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt +++ b/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt @@ -26,4 +26,4 @@ fun NavGraphBuilder.placeNavGraph( } @Serializable -data object Place : MainTabRoute \ No newline at end of file +data object Place : MainTabRoute diff --git a/local/oauth/build.gradle.kts b/local/oauth/build.gradle.kts index 37bc7f38..4a857584 100644 --- a/local/oauth/build.gradle.kts +++ b/local/oauth/build.gradle.kts @@ -11,4 +11,4 @@ dependencies { implementation(projects.core.datastore) implementation(projects.data.oauth) implementation(libs.bundles.datastore) -} \ No newline at end of file +} diff --git a/local/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthLocalDataSourceImpl.kt b/local/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthLocalDataSourceImpl.kt index bafcd82d..d442a88e 100644 --- a/local/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthLocalDataSourceImpl.kt +++ b/local/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthLocalDataSourceImpl.kt @@ -6,9 +6,9 @@ import com.teamsolply.solply.oauth.source.OauthLocalDataSource import javax.inject.Inject class OauthLocalDataSourceImpl @Inject constructor( - private val oauthLocalDataSource: DataStore, + private val oauthLocalDataSource: DataStore ) : OauthLocalDataSource { override suspend fun setAuthLocalData(jwtToken: SolplyTokenData) { oauthLocalDataSource.updateData { jwtToken } } -} \ No newline at end of file +} diff --git a/local/oauth/src/main/java/com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt b/local/oauth/src/main/java/com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt index 86dca9db..42cb8fdd 100644 --- a/local/oauth/src/main/java/com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt +++ b/local/oauth/src/main/java/com/teamsolply/solply/oauth/di/AuthLocalDataModule.kt @@ -14,4 +14,4 @@ abstract class AuthLocalDataModule { @Binds @Singleton abstract fun bindsOauthLocalDataSource(authLocalDataSource: OauthLocalDataSourceImpl): OauthLocalDataSource -} \ No newline at end of file +}