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/feature/home/.gitignore b/data/oauth/.gitignore similarity index 100% rename from feature/home/.gitignore rename to data/oauth/.gitignore diff --git a/data/oauth/build.gradle.kts b/data/oauth/build.gradle.kts new file mode 100644 index 00000000..9b7929d1 --- /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) +} 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..e74cf539 --- /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 +} 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..45bfa10d --- /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 + ) + ) + } +} 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..5fdf5eff --- /dev/null +++ b/data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthLocalDataSource.kt @@ -0,0 +1,7 @@ +package com.teamsolply.solply.oauth.source + +import com.teamsolply.solply.datastore.SolplyTokenData + +interface OauthLocalDataSource { + suspend fun setAuthLocalData(jwtToken: SolplyTokenData) +} 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 100% rename from domain/build.gradle.kts rename to domain/oauth/build.gradle.kts 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..67ca7e04 --- /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..b21cd4f7 --- /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 +} 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/course/.gitignore b/feature/course/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/feature/course/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file 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/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..58aca823 --- /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" + ) + } +} 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..e32c8d10 --- /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 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/main/build.gradle.kts b/feature/main/build.gradle.kts index e420306b..f2748c28 100644 --- a/feature/main/build.gradle.kts +++ b/feature/main/build.gradle.kts @@ -8,5 +8,9 @@ android { dependencies { implementation(projects.feature.oauth) - implementation(projects.feature.home) + 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 a6507d29..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 @@ -1,39 +1,25 @@ package com.teamsolply.solply.main import androidx.compose.runtime.Composable -import com.teamsolply.solply.home.navigation.Home +import com.teamsolply.solply.course.navigation.Course import com.teamsolply.solply.navigation.Route +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", - Home + contentDescription = "PLACE", + Place ), - DummyRoute1( + COURSE( 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 - ); + 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 7a81d09f..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,13 +4,15 @@ 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 import androidx.navigation.compose.rememberNavController import androidx.navigation.navOptions -import com.teamsolply.solply.home.navigation.navigateHome +import com.teamsolply.solply.course.navigation.navigateCourse import com.teamsolply.solply.oauth.navigation.Oauth +import com.teamsolply.solply.onboarding.navigation.navigateOnBoarding +import com.teamsolply.solply.place.navigation.navigatePlace internal class MainNavigator( val navController: NavHostController @@ -28,7 +30,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,14 +39,19 @@ 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.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 ab50be6b..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,10 +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.home.navigation.homeNavGraph 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 @@ -34,8 +39,31 @@ internal fun MainScreen( .background(color = SolplyTheme.colors.white) .fillMaxSize() ) { - oauthNavGraph(paddingValues = innerPadding) - homeNavGraph(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/.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/local/src/main/AndroidManifest.xml b/feature/maps/src/main/AndroidManifest.xml similarity index 100% rename from local/src/main/AndroidManifest.xml rename to feature/maps/src/main/AndroidManifest.xml diff --git a/feature/home/src/main/java/com/teamsolply/solply/home/HomeScreen.kt b/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt similarity index 86% rename from feature/home/src/main/java/com/teamsolply/solply/home/HomeScreen.kt rename to feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt index 40858bfa..2f3c6d43 100644 --- a/feature/home/src/main/java/com/teamsolply/solply/home/HomeScreen.kt +++ b/feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt @@ -1,4 +1,4 @@ -package com.teamsolply.solply.home +package com.teamsolply.solply.maps import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -10,15 +10,16 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @Composable -fun HomeRoute( +fun MapsRoute( paddingValues: PaddingValues ) { - HomeScreen() + MapsScreen() } @Composable -fun HomeScreen( +fun MapsScreen( modifier: Modifier = Modifier + ) { Column( modifier.fillMaxSize(), @@ -26,7 +27,7 @@ fun HomeScreen( horizontalAlignment = Alignment.CenterHorizontally ) { Text( - "home" + "Maps" ) } } 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..6346c4cb --- /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 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/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..c356aade --- /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" + ) + } +} 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..3c9cd782 --- /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 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/presentation/OauthContract.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt similarity index 60% 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..eacd739a 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 @@ -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/presentation/OauthScreen.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt similarity index 91% 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..a128cda3 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 @@ -26,6 +26,7 @@ import kotlinx.coroutines.flow.collectLatest @Composable fun OauthRoute( paddingValues: PaddingValues, + navigateToOnBoarding: () -> Unit, viewModel: OauthViewModel = hiltViewModel() ) { val context = LocalContext.current @@ -37,7 +38,12 @@ 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" @@ -47,6 +53,8 @@ fun OauthRoute( 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 new file mode 100644 index 00000000..dbd02985 --- /dev/null +++ b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt @@ -0,0 +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( + 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) + } + } + } + } +} 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..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 @@ -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( @@ -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/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthViewModel.kt b/feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthViewModel.kt deleted file mode 100644 index 993de13f..00000000 --- a/feature/oauth/src/main/java/com/teamsolply/solply/oauth/presentation/OauthViewModel.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.teamsolply.solply.oauth.presentation - -import com.teamsolply.solply.ui.base.BaseViewModel -import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject - -@HiltViewModel -class OauthViewModel @Inject constructor() : - BaseViewModel(OauthState()) { - override fun handleIntent(intent: OauthIntent) { - when (intent) { - OauthIntent.KakaoLoginClick -> postSideEffect(OauthSideEffect.StartKakaoLogin) - } - } -} 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/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..1d8067ab --- /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 +} 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..77b02793 --- /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 + ) + ) + } +} 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..937da65a --- /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) + } + } +} 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..355a8ac3 --- /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 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/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..af639509 --- /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" + ) + } +} diff --git a/feature/home/src/main/java/com/teamsolply/solply/home/navigation/HomeNavigation.kt b/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt similarity index 63% rename from feature/home/src/main/java/com/teamsolply/solply/home/navigation/HomeNavigation.kt rename to feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt index bde2b587..b6ed18ab 100644 --- a/feature/home/src/main/java/com/teamsolply/solply/home/navigation/HomeNavigation.kt +++ b/feature/place/src/main/java/com/teamsolply/solply/place/navigation/PlaceNavigation.kt @@ -1,29 +1,29 @@ -package com.teamsolply.solply.home.navigation +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.home.HomeRoute import com.teamsolply.solply.navigation.MainTabRoute +import com.teamsolply.solply.place.PlaceRoute import kotlinx.serialization.Serializable -fun NavController.navigateHome( +fun NavController.navigatePlace( navOptions: NavOptions ) { - navigate(Home, navOptions) + navigate(Place, navOptions) } -fun NavGraphBuilder.homeNavGraph( +fun NavGraphBuilder.placeNavGraph( paddingValues: PaddingValues ) { - composable { - HomeRoute( + composable { + PlaceRoute( paddingValues = paddingValues ) } } @Serializable -data object Home : MainTabRoute +data object Place : MainTabRoute 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..4a857584 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) } 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..d442a88e --- /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 } + } +} 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..42cb8fdd --- /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 +} 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/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 6b97480d..59ba70f4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -32,10 +32,14 @@ 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:home") include(":feature:oauth") +include(":feature:onboarding") +include(":feature:place") +include(":feature:course") +include(":feature:maps") +include(":feature:mypage")