diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 343cddc70..81111c82b 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -20,7 +20,9 @@ android { buildConfigField("String", "DATA_GO_KR_SERVICE_KEY", "\"${properties["dataGoKrServiceKey"]}\"") buildConfigField("String", "DATA_GO_KR_BASE_URL", "\"${properties["dataGoKrBaseUrl"]}\"") buildConfigField("String", "AWS_BASE_URL", "\"${properties["awsUrl"]}\"") - buildConfigField("String", "VERTEX_ENDPOINT_URL", "\"${properties["vertexEndpointUrl"]}\"") + buildConfigField("String", "AWS_USER_POOL", "\"${properties["AWS_USER_POOL"]}\"") + buildConfigField("String", "AWS_USER_CLIENT_ID", "\"${properties["AWS_USER_CLIENT_ID"]}\"") + buildConfigField("String", "AWS_USER_CLIENT_SECRET", "\"${properties["AWS_USER_CLIENT_SECRET"]}\"") } hilt { diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index a6042ace9..b8960805f 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -23,4 +23,5 @@ dependencies { implementation(libs.kotlinx.serialization.json) implementation(libs.kotlinx.coroutines.android) implementation(libs.androidx.paging.runtime) + implementation(libs.aws.android.sdk.cognito) } diff --git a/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepository.kt b/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepository.kt index 50a877d3e..64e8cf345 100644 --- a/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepository.kt +++ b/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepository.kt @@ -5,9 +5,9 @@ import com.android.mediproject.core.model.requestparameters.LoginParameter import com.android.mediproject.core.model.requestparameters.SignUpParameter interface SignRepository { - fun login(loginParameter: LoginParameter): Result + suspend fun login(loginParameter: LoginParameter): Result - fun signUp(signUpParameter: SignUpParameter): Result + suspend fun signUp(signUpParameter: SignUpParameter): Result - fun signOut() + suspend fun signOut() } diff --git a/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepositoryImpl.kt b/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepositoryImpl.kt index 5ea2fd946..c5b9d241b 100644 --- a/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepositoryImpl.kt +++ b/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepositoryImpl.kt @@ -17,24 +17,20 @@ class SignRepositoryImpl( private val userInfoRepository: UserInfoRepository, ) : SignRepository { - override fun login(loginParameter: LoginParameter): Result { - signDataSource.logIn(loginParameter).collect { signInResult -> - if (signInResult.isFailure) { - trySend(Result.failure(signInResult.exceptionOrNull() ?: Exception("로그인 실패"))) - } else { - appDataStore.apply { - saveSkipIntro(true) - signInResult.onSuccess { - userInfoRepository.updateMyAccountInfo(AccountState.SignedIn(it._userId!!.toLong(), it._nickName!!, it._email!!)) - saveMyAccountInfo(it._email!!, it._nickName!!, it._userId!!.toLong()) - } - } - trySend(Result.success(Unit)) + override suspend fun login(loginParameter: LoginParameter): Result { + val result = signDataSource.logIn(loginParameter) + if (result.isSuccess) { + appDataStore.run { + saveSkipIntro(true) + userInfoRepository.updateMyAccountInfo(AccountState.SignedIn(it._userId!!.toLong(), it._nickName!!, it._email!!)) + saveMyAccountInfo(it._email!!, it._nickName!!, it._userId!!.toLong()) } } + + return Result.success(true) } - override fun signUp(signUpParameter: SignUpParameter): Flow> = channelFlow { + override suspend fun signUp(signUpParameter: SignUpParameter): Flow> = channelFlow { signDataSource.signUp(signUpParameter).collect { signUpResult -> if (signUpResult.isFailure) { trySend(Result.failure(signUpResult.exceptionOrNull() ?: Exception("로그인 실패"))) @@ -58,6 +54,6 @@ class SignRepositoryImpl( * * 저장된 토큰 정보를 삭제한다. */ - override fun signOut() = signDataSource.signOut() + override suspend fun signOut() = signDataSource.signOut() } diff --git a/core/model/src/main/java/com/android/mediproject/core/model/sign/SignInResponse.kt b/core/model/src/main/java/com/android/mediproject/core/model/sign/SignInResponse.kt deleted file mode 100644 index 1816345e3..000000000 --- a/core/model/src/main/java/com/android/mediproject/core/model/sign/SignInResponse.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.android.mediproject.core.model.sign - - -import com.android.mediproject.core.model.servercommon.ServerSignResponse -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class SignInResponse( - @SerialName("userId") val _userId: Long?, - @SerialName("nickname") val _nickName: String?, - @SerialName("email") val _email: String?, -) : ServerSignResponse() diff --git a/core/model/src/main/java/com/android/mediproject/core/model/sign/SignUpResponse.kt b/core/model/src/main/java/com/android/mediproject/core/model/sign/SignUpResponse.kt deleted file mode 100644 index 5dba4b651..000000000 --- a/core/model/src/main/java/com/android/mediproject/core/model/sign/SignUpResponse.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.android.mediproject.core.model.sign - - -import com.android.mediproject.core.model.servercommon.ServerSignResponse -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class SignUpResponse( - @SerialName("userId") val _userId: Long?, - @SerialName("nickname") val _nickName: String?, - @SerialName("email") val _email: String?, -) : ServerSignResponse() diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 3f016c724..65c74b8a8 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -34,4 +34,5 @@ dependencies { ksp(libs.ksealedbinding.compiler) implementation(libs.ksealedbinding.annotation) + implementation(libs.aws.android.sdk.cognito) } diff --git a/feature/aws/src/main/java/com/android/mediproject/feature/aws/AWSAccountManager.kt b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/AWSAccountManager.kt similarity index 73% rename from feature/aws/src/main/java/com/android/mediproject/feature/aws/AWSAccountManager.kt rename to core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/AWSAccountManager.kt index 5c8590a65..e8e808bc5 100644 --- a/feature/aws/src/main/java/com/android/mediproject/feature/aws/AWSAccountManager.kt +++ b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/AWSAccountManager.kt @@ -1,4 +1,4 @@ -package com.android.mediproject.feature.aws +package com.android.mediproject.core.network.datasource.sign import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool diff --git a/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignDataSource.kt b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignDataSource.kt index b3eb6d75b..2ff9dc93a 100644 --- a/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignDataSource.kt +++ b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignDataSource.kt @@ -1,13 +1,10 @@ package com.android.mediproject.core.network.datasource.sign -import com.android.mediproject.core.model.sign.SignInResponse -import com.android.mediproject.core.model.sign.SignUpResponse import com.android.mediproject.core.model.requestparameters.LoginParameter import com.android.mediproject.core.model.requestparameters.SignUpParameter -import kotlinx.coroutines.flow.Flow interface SignDataSource { - fun logIn(loginParameter: LoginParameter): Flow> - fun signUp(signUpParameter: SignUpParameter): Flow> - fun signOut() + suspend fun logIn(loginParameter: LoginParameter): Result + suspend fun signUp(signUpParameter: SignUpParameter): Result + suspend fun signOut() } diff --git a/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignDataSourceImpl.kt b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignDataSourceImpl.kt index e7e0c411f..a0be55860 100644 --- a/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignDataSourceImpl.kt +++ b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignDataSourceImpl.kt @@ -1,66 +1,32 @@ package com.android.mediproject.core.network.datasource.sign -import com.android.mediproject.core.common.util.AesCoder -import com.android.mediproject.core.model.sign.SignInResponse -import com.android.mediproject.core.model.sign.SignUpResponse -import com.android.mediproject.core.model.token.RequestBehavior +import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserAttributes import com.android.mediproject.core.model.requestparameters.LoginParameter - import com.android.mediproject.core.model.requestparameters.SignUpParameter -import com.android.mediproject.core.network.datasource.tokens.onResponseWithTokens -import com.android.mediproject.core.network.module.AwsNetworkApi -import com.android.mediproject.core.network.parameter.LoginRequestParameter -import com.android.mediproject.core.network.parameter.SignUpRequestParameter -import com.android.mediproject.core.network.tokens.TokenServer -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.channelFlow -import java.lang.ref.WeakReference -import javax.inject.Inject -class SignDataSourceImpl @Inject constructor( - private val awsNetworkApi: AwsNetworkApi, private val tokenServer: TokenServer, private val aesCoder: AesCoder, +class SignDataSourceImpl( + private val signInOutAWS: SignInOutAWS, + private val signUpAWS: SignUpAWS, ) : SignDataSource { - - /** - * 로그인 - */ - override fun logIn(loginParameter: LoginParameter): Flow> = channelFlow { - awsNetworkApi.login( - LoginRequestParameter( - WeakReference(loginParameter.email.joinToString("")).get()!!, - WeakReference(aesCoder.encodePassword(loginParameter.email, loginParameter.password)).get()!!, - ), - ).onResponseWithTokens(RequestBehavior.NewTokens, tokenServer).fold( - onSuccess = { - Result.success(it) - }, - onFailure = { - Result.failure(it) - }, - ).also { - trySend(it) - } - } - - override fun signUp(signUpParameter: SignUpParameter): Flow> = channelFlow { - awsNetworkApi.signUp( - SignUpRequestParameter( - WeakReference(signUpParameter.email.joinToString("")).get()!!, - WeakReference(aesCoder.encodePassword(signUpParameter.email, signUpParameter.password)).get()!!, signUpParameter.nickName, - ), - ).onResponseWithTokens(RequestBehavior.NewTokens, tokenServer).fold( - onSuccess = { - Result.success(it) - + override suspend fun logIn(loginParameter: LoginParameter): Result = signInOutAWS.signIn( + SignInOutAWS.SignInRequest( + loginParameter.email.contentToString(), + loginParameter.password.map { it.code.toByte() }.toByteArray(), + ), + ) + + override suspend fun signUp(signUpParameter: SignUpParameter): Result = signUpAWS.signUp( + SignUpAWS.SignUpRequest( + signUpParameter.email.contentToString(), + signUpParameter.password.map { it.code.toByte() }.toByteArray(), + CognitoUserAttributes().apply { + addAttribute("user_name", signUpParameter.nickName) }, - onFailure = { Result.failure(it) }, - ).also { - trySend(it) - } - } + ), + ) - override fun signOut() { - tokenServer.removeTokens() + override suspend fun signOut() { + signInOutAWS.signOut() } } diff --git a/feature/aws/src/main/java/com/android/mediproject/feature/aws/SignInOutAWS.kt b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignInOutAWS.kt similarity index 98% rename from feature/aws/src/main/java/com/android/mediproject/feature/aws/SignInOutAWS.kt rename to core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignInOutAWS.kt index fed2b98b5..35e18d5f2 100644 --- a/feature/aws/src/main/java/com/android/mediproject/feature/aws/SignInOutAWS.kt +++ b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignInOutAWS.kt @@ -1,4 +1,4 @@ -package com.android.mediproject.feature.aws +package com.android.mediproject.core.network.datasource.sign import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoDevice import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool diff --git a/feature/aws/src/main/java/com/android/mediproject/feature/aws/SignUpAWS.kt b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignUpAWS.kt similarity index 98% rename from feature/aws/src/main/java/com/android/mediproject/feature/aws/SignUpAWS.kt rename to core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignUpAWS.kt index 76c683f9d..8a9bb8732 100644 --- a/feature/aws/src/main/java/com/android/mediproject/feature/aws/SignUpAWS.kt +++ b/core/network/src/main/java/com/android/mediproject/core/network/datasource/sign/SignUpAWS.kt @@ -1,4 +1,4 @@ -package com.android.mediproject.feature.aws +package com.android.mediproject.core.network.datasource.sign import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserAttributes diff --git a/core/network/src/main/java/com/android/mediproject/core/network/module/ServerNetwork.kt b/core/network/src/main/java/com/android/mediproject/core/network/module/ServerNetwork.kt index ae0dbad52..926653c2b 100644 --- a/core/network/src/main/java/com/android/mediproject/core/network/module/ServerNetwork.kt +++ b/core/network/src/main/java/com/android/mediproject/core/network/module/ServerNetwork.kt @@ -1,5 +1,8 @@ package com.android.mediproject.core.network.module +import android.content.Context +import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool +import com.amazonaws.regions.Regions import com.android.mediproject.core.common.BuildConfig import com.android.mediproject.core.common.util.AesCoder import com.android.mediproject.core.model.comments.CommentChangedResponse @@ -30,6 +33,8 @@ import com.android.mediproject.core.network.datasource.medicineid.MedicineIdData import com.android.mediproject.core.network.datasource.medicineid.MedicineIdDataSourceImpl import com.android.mediproject.core.network.datasource.sign.SignDataSource import com.android.mediproject.core.network.datasource.sign.SignDataSourceImpl +import com.android.mediproject.core.network.datasource.sign.SignInOutAWSImpl +import com.android.mediproject.core.network.datasource.sign.SignUpAWSImpl import com.android.mediproject.core.network.datasource.tokens.TokenDataSource import com.android.mediproject.core.network.datasource.tokens.TokenDataSourceImpl import com.android.mediproject.core.network.datasource.user.UserDataSource @@ -41,6 +46,7 @@ import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFact import dagger.Module import dagger.Provides import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaType @@ -87,8 +93,14 @@ object ServerNetwork { @Provides fun providesSignDataSource( - awsNetworkApi: AwsNetworkApi, tokenServer: TokenServer, aesCoder: AesCoder, - ): SignDataSource = SignDataSourceImpl(awsNetworkApi, tokenServer, aesCoder) + @ApplicationContext context: Context, + ): SignDataSource { + val userPool = CognitoUserPool( + context, BuildConfig.AWS_USER_POOL, BuildConfig.AWS_USER_CLIENT_ID, BuildConfig.AWS_USER_CLIENT_SECRET, + Regions.US_EAST_2, + ) + return SignDataSourceImpl(SignInOutAWSImpl(userPool), SignUpAWSImpl(userPool)) + } @Provides @Singleton diff --git a/feature/aws/.gitignore b/feature/aws/.gitignore deleted file mode 100644 index 42afabfd2..000000000 --- a/feature/aws/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/feature/aws/build.gradle.kts b/feature/aws/build.gradle.kts deleted file mode 100644 index b24afaa8b..000000000 --- a/feature/aws/build.gradle.kts +++ /dev/null @@ -1,14 +0,0 @@ -plugins { - id("mediproject.android.feature") -} - -android { - namespace = "com.android.mediproject.feature.aws" -} - -dependencies { - implementation(project(":core:common")) - implementation(project(":core:model")) - implementation(libs.bundles.uiAndroidx) - implementation(libs.aws.android.sdk.cognito) -} diff --git a/feature/aws/consumer-rules.pro b/feature/aws/consumer-rules.pro deleted file mode 100644 index e69de29bb..000000000 diff --git a/feature/aws/proguard-rules.pro b/feature/aws/proguard-rules.pro deleted file mode 100644 index 481bb4348..000000000 --- a/feature/aws/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/aws/src/androidTest/java/com/android/mediproject/feature/aws/ExampleInstrumentedTest.kt b/feature/aws/src/androidTest/java/com/android/mediproject/feature/aws/ExampleInstrumentedTest.kt deleted file mode 100644 index a887f0204..000000000 --- a/feature/aws/src/androidTest/java/com/android/mediproject/feature/aws/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.android.mediproject.feature.aws - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.android.mediproject.feature.aws.test", appContext.packageName) - } -} diff --git a/feature/aws/src/main/AndroidManifest.xml b/feature/aws/src/main/AndroidManifest.xml deleted file mode 100644 index 8bdb7e14b..000000000 --- a/feature/aws/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/feature/aws/src/main/java/com/android/mediproject/feature/aws/AWSAccountManagerModule.kt b/feature/aws/src/main/java/com/android/mediproject/feature/aws/AWSAccountManagerModule.kt deleted file mode 100644 index 31a290eec..000000000 --- a/feature/aws/src/main/java/com/android/mediproject/feature/aws/AWSAccountManagerModule.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.android.mediproject.feature.aws - -import android.content.Context -import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool -import com.amazonaws.regions.Regions -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -object AWSAccountManagerModule { - - private val userPoolId = "us-east-2_mYPkrflCj" - private val userClientId = "776ei62ntqa54shn1nanajofs4" - private val userClientSecretKey = "gvbg7oisijo8aqlu4o09hcja9ghmiso4dj65bvugca8qkd55ijo" - private val regions = Regions.US_EAST_2 - - @Provides - @Singleton - internal fun providesUserPool(@ApplicationContext context: Context) = - CognitoUserPool(context, userPoolId, userClientId, userClientSecretKey, regions) - - @Provides - fun providesSingUpAWS(userPool: CognitoUserPool): SignUpAWS = SignUpAWSImpl(userPool) - - @Provides - fun providesSignInOutAWS(userPool: CognitoUserPool): SignInOutAWS = SignInOutAWSImpl(userPool) - -} diff --git a/feature/aws/src/test/java/com/android/mediproject/feature/aws/ExampleUnitTest.kt b/feature/aws/src/test/java/com/android/mediproject/feature/aws/ExampleUnitTest.kt deleted file mode 100644 index 744b987d6..000000000 --- a/feature/aws/src/test/java/com/android/mediproject/feature/aws/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.android.mediproject.feature.aws - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} diff --git a/feature/intro/build.gradle.kts b/feature/intro/build.gradle.kts index 89c5cedfa..9623cd7af 100644 --- a/feature/intro/build.gradle.kts +++ b/feature/intro/build.gradle.kts @@ -18,7 +18,6 @@ dependencies { implementation(project(":core:domain")) implementation(project(":core:test")) implementation(project(":core:data")) - implementation(project(":feature:aws")) implementation(libs.bundles.glides) kapt(libs.bundles.glides.kapt) diff --git a/settings.gradle.kts b/settings.gradle.kts index c3a4a6578..fcd3c10a3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -48,4 +48,3 @@ include(":feature:medicine") include(":feature:news") include(":feature:camera") include(":core:ai") -include(":feature:aws")