Skip to content

Commit

Permalink
#219 AwsNetworkApi.kt 내 코드를 기존 API 연결코드에서 aws api연결을 위한 코드로 수정, 댓글 ge…
Browse files Browse the repository at this point in the history
…t,post 메서드 수정
  • Loading branch information
pknujsp committed Mar 10, 2024
1 parent 53ceaa8 commit ce3ce28
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ import kotlinx.serialization.Serializable
*/
@Serializable
data class NewCommentParameter(
@SerialName("content") val content: String, // 테스트 - 서브 댓글 2 - 2
@SerialName("medicineId") val medicineId: String, // 41
@SerialName("subOrdinationId") val subOrdinationId: String = ROOT_COMMENT_ID, // 3
@SerialName("userId") val userId: String,
@SerialName("content") val content: String,
@SerialName("medicine_id") val medicineId: String,
@SerialName("parent_id") val parentId: String = ROOT_COMMENT_ID,
@SerialName("user_id") val userId: String,
) {
companion object {
const val ROOT_COMMENT_ID = "0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ class CommentsDataSourceImpl @Inject constructor(
private val awsNetworkApi: AwsNetworkApi,
) : CommentsDataSource {

/**
* 약품에 대한 댓글 리스트를 가져온다.
* @param medicineId: 약품 고유 번호
*/
override suspend fun getCommentsByMedicineId(medicineId: Long): Result<CommentListResponse> {
return awsNetworkApi.getCommentsByMedicineId(medicineId).onResponse().fold(
onSuccess = { response ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ import com.android.mediproject.core.model.requestparameters.DeleteCommentParamet
import com.android.mediproject.core.model.requestparameters.EditCommentParameter
import com.android.mediproject.core.model.requestparameters.GetMedicineIdParameter
import com.android.mediproject.core.model.requestparameters.NewCommentParameter
import com.android.mediproject.core.model.sign.SignInResponse
import com.android.mediproject.core.model.sign.SignUpResponse
import com.android.mediproject.core.model.token.ReissueTokenResponse
import com.android.mediproject.core.model.user.remote.ChangeNicknameResponse
import com.android.mediproject.core.model.user.remote.ChangePasswordResponse
import com.android.mediproject.core.model.user.remote.UserResponse
Expand All @@ -39,8 +36,6 @@ import com.android.mediproject.core.network.datasource.user.UserDataSource
import com.android.mediproject.core.network.datasource.user.UserDataSourceImpl
import com.android.mediproject.core.network.datasource.user.UserInfoDataSource
import com.android.mediproject.core.network.datasource.user.UserInfoDataSourceImpl
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 com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import dagger.Module
Expand Down Expand Up @@ -72,69 +67,45 @@ object ServerNetwork {
coerceInputValues = true
}


@Provides
@Named("awsNetworkApiWithoutTokens")
@Singleton
fun providesWithoutTokensAwsNetworkApi(
@Named("okHttpClientWithoutAny") okHttpClient: OkHttpClient,
fun providesAwsNetworkApi(
@Named("okHttpClientWithAccessTokens") okHttpClient: OkHttpClient,
): AwsNetworkApi = Retrofit.Builder().client(okHttpClient).addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
.baseUrl(BuildConfig.AWS_BASE_URL).build().create(AwsNetworkApi::class.java)


@Provides
@Singleton
fun provideFavoriteMedicineDatasource(
@Named("awsNetworkApiWithAccessTokens") awsNetworkApi: AwsNetworkApi,
awsNetworkApi: AwsNetworkApi,
): FavoriteMedicineDataSource = FavoriteMedicineDataSourceImpl(awsNetworkApi)

@Provides
@Named("awsNetworkApiWithAccessTokens")
@Singleton
fun providesAwsNetworkApi(
@Named("okHttpClientWithAccessTokens") okHttpClient: OkHttpClient,
): AwsNetworkApi = Retrofit.Builder().client(okHttpClient).addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
.baseUrl(BuildConfig.AWS_BASE_URL).build().create(AwsNetworkApi::class.java)

@Provides
@Named("awsNetworkApiWithRefreshTokens")
fun providesReissueTokenAwsNetworkApi(
@Named("okHttpClientWithReissueTokens") okHttpClient: OkHttpClient,
): AwsNetworkApi = Retrofit.Builder().client(okHttpClient).addConverterFactory(
json.asConverterFactory(
"application/json".toMediaType(),
),
).baseUrl(BuildConfig.AWS_BASE_URL).build().create(AwsNetworkApi::class.java)

@Provides
@Singleton
fun providesCommentsDataSource(@Named("awsNetworkApiWithAccessTokens") awsNetworkApi: AwsNetworkApi): CommentsDataSource =
CommentsDataSourceImpl(awsNetworkApi)
fun providesCommentsDataSource(awsNetworkApi: AwsNetworkApi): CommentsDataSource = CommentsDataSourceImpl(awsNetworkApi)

@Provides
fun providesSignDataSource(
@Named("awsNetworkApiWithoutTokens") awsNetworkApi: AwsNetworkApi, tokenServer: TokenServer, aesCoder: AesCoder,
awsNetworkApi: AwsNetworkApi, tokenServer: TokenServer, aesCoder: AesCoder,
): SignDataSource = SignDataSourceImpl(awsNetworkApi, tokenServer, aesCoder)

@Provides
@Singleton
fun providesGetMedicineIdDataSource(@Named("awsNetworkApiWithoutTokens") awsNetworkApi: AwsNetworkApi): MedicineIdDataSource =
MedicineIdDataSourceImpl(awsNetworkApi)
fun providesGetMedicineIdDataSource(awsNetworkApi: AwsNetworkApi): MedicineIdDataSource = MedicineIdDataSourceImpl(awsNetworkApi)

@Provides
@Singleton
fun providesUserInfosDataSource(@Named("awsNetworkApiWithAccessTokens") awsNetworkApi: AwsNetworkApi): UserInfoDataSource =
UserInfoDataSourceImpl(awsNetworkApi)
fun providesUserInfosDataSource(awsNetworkApi: AwsNetworkApi): UserInfoDataSource = UserInfoDataSourceImpl(awsNetworkApi)

@Provides
@Singleton
fun providesUserDataSource(@Named("awsNetworkApiWithAccessTokens") awsNetworkApi: AwsNetworkApi, aesCoder: AesCoder): UserDataSource =
UserDataSourceImpl(awsNetworkApi, aesCoder)
fun providesUserDataSource(awsNetworkApi: AwsNetworkApi, aesCoder: AesCoder): UserDataSource = UserDataSourceImpl(awsNetworkApi, aesCoder)

@Provides
@Singleton
fun providesTokenDataSource(
@Named("awsNetworkApiWithRefreshTokens") awsNetworkApi: AwsNetworkApi,
awsNetworkApi: AwsNetworkApi,
tokenServer: TokenServer,
): TokenDataSource = TokenDataSourceImpl(awsNetworkApi, tokenServer)
}
Expand All @@ -144,7 +115,8 @@ interface AwsNetworkApi {
@GET(value = "medicine/favorite")
suspend fun getFavoriteMedicineList(): Response<FavoriteMedicineListResponse>

@POST(value = "user/register")

/*@POST(value = "user/register")
suspend fun signUp(
@Body signUpRequestParameter: SignUpRequestParameter,
): Response<SignUpResponse>
Expand All @@ -157,21 +129,24 @@ interface AwsNetworkApi {
@POST(value = "user/reissue")
suspend fun reissueTokens(
): Response<ReissueTokenResponse>
): Response<ReissueTokenResponse>*/

/**
* 특정 약에 대한 댓글 목록 조회
*/
@GET(value = "medicine/comment/{medicineId}")
@GET(value = "comment/medicine_id={medicineId}&page={page}&rows={rows}&userId={userId}")
suspend fun getCommentsByMedicineId(
@Path("medicineId", encoded = true) medicineId: Long,
@Path("page", encoded = true) page: Int,
@Path("rows", encoded = true) rows: Int,
@Path("userId", encoded = true) userId: String = "-1",
): Response<CommentListResponse>

/**
* 내가 작성한 댓글 목록 조회
*/
@GET(value = "user/comment")
suspend fun getMyCommentsList() : Response<MyCommentsListResponse>
suspend fun getMyCommentsList(): Response<MyCommentsListResponse>

/**
* 댓글 수정
Expand Down Expand Up @@ -210,7 +185,7 @@ interface AwsNetworkApi {
/**
* 댓글 등록
*/
@POST(value = "medicine/comment/writeTest")
@POST(value = "comment")
suspend fun applyNewComment(
@Body newCommentParameter: NewCommentParameter,
): Response<CommentChangedResponse>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ internal class SignInOutAWSImpl(override val userPool: CognitoUserPool) : AWSAcc
override suspend fun signIn(request: SignInOutAWS.SignInRequest) = suspendCancellableCoroutine { continuation ->
userPool.getUser(request.email).getSession(
object : AuthenticationHandler {
override fun onSuccess(userSession: CognitoUserSession, newDevice: CognitoDevice) {
override fun onSuccess(userSession: CognitoUserSession, newDevice: CognitoDevice?) {
val response = SignInOutAWS.SignInResponse(userSession, newDevice)
continuation.resume(Result.success(response))
}
Expand Down Expand Up @@ -68,6 +68,6 @@ interface SignInOutAWS {

data class SignInResponse(
val userSession: CognitoUserSession,
val newDevice: CognitoDevice,
val newDevice: CognitoDevice? = null,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ class MedicineCommentsViewModel @Inject constructor(
medicineId = medicineBasicInfo.filterNotNull().last().medicineIdInAws.toString(),
userId = myId.value.toString(),
content = comment,
subOrdinationId = replyId.value.toString(),
parentId = replyId.value.toString(),
),
).collectLatest { result ->
result.onSuccess {
Expand Down Expand Up @@ -285,7 +285,7 @@ class MedicineCommentsViewModel @Inject constructor(
_medicineBasicInfo.emit(medicineBasicInfo)
}
}

}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.android.mediproject.core.domain.SignUseCase
import com.android.mediproject.core.model.navargs.TOHOME
import com.android.mediproject.core.model.requestparameters.LoginParameter
import com.android.mediproject.core.ui.base.BaseViewModel
import com.android.mediproject.feature.aws.SignInOutAWS
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineExceptionHandler
Expand All @@ -29,6 +30,7 @@ import javax.inject.Inject
class LoginViewModel @Inject constructor(
private val signUseCase: SignUseCase,
@Dispatcher(MediDispatchers.Default) private val defaultDispatcher: CoroutineDispatcher,
private val signInAWS: SignInOutAWS,
) : BaseViewModel() {

val savedEmail = signUseCase.savedEmail.flatMapLatest {
Expand Down Expand Up @@ -106,6 +108,13 @@ class LoginViewModel @Inject constructor(
val pair = initEmailPassword(email, password)
val (emailCharArray, passwordCharArray) = pair.first to pair.second

val result = signInAWS.signIn(SignInOutAWS.SignInRequest(email, passwordCharArray.map { it.code.toByte() }.toByteArray()))
if (result.isSuccess) {
loginSuccess()
} else {
loginFailed()
}

setLoginState(LoginState.Logining)

signUseCase.login(LoginParameter(emailCharArray, passwordCharArray, isEmailSaved)).collect { result ->
Expand Down

0 comments on commit ce3ce28

Please sign in to comment.