Skip to content

Commit

Permalink
[feature/#1011] 휴대폰 인증 검사 서버통신 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
leeeyubin committed Jan 1, 2025
1 parent fc2e525 commit fc867fe
Show file tree
Hide file tree
Showing 17 changed files with 174 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -109,16 +109,20 @@ internal fun CertificationRoute(
)

CertificationScreen(
onPhoneNumberClick = {
onCreateCodeClick = {
onShowSnackBar()
viewModel.createPhoneNumber()
viewModel.createCode()
},
onCertificateClick = {
viewModel.certificateCode()
}
)
}

@Composable
private fun CertificationScreen(
onPhoneNumberClick: () -> Unit
onCreateCodeClick: () -> Unit,
onCertificateClick:()-> Unit
) {
Column(
modifier = Modifier
Expand All @@ -130,7 +134,7 @@ private fun CertificationScreen(
TopBar()
Spacer(modifier = Modifier.height(44.dp))
PhoneCertification(
onPhoneNumberClick = onPhoneNumberClick,
onPhoneNumberClick = onCreateCodeClick,
textColor = Gray80
)
Spacer(modifier = Modifier.height(10.dp))
Expand Down Expand Up @@ -175,7 +179,7 @@ private fun CertificationScreen(
AuthButton(
modifier = Modifier.fillMaxWidth(),
padding = PaddingValues(vertical = 16.dp),
onClick = {},
onClick = onCertificateClick,
containerColor = Gray10,
contentColor = Gray950,
disabledContentColor = Gray60,
Expand Down Expand Up @@ -239,7 +243,8 @@ internal enum class ErrorCase(val message: String) {
private fun AuthCertificationPreview() {
SoptTheme {
CertificationScreen(
onPhoneNumberClick = {}
onCreateCodeClick = {},
onCertificateClick = {}
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.launch
import org.sopt.official.domain.auth.model.UserInformation
import org.sopt.official.domain.auth.model.InformationWithCode
import org.sopt.official.domain.auth.model.InitialInformation
import org.sopt.official.domain.auth.repository.AuthRepository
import javax.inject.Inject

Expand All @@ -24,18 +25,35 @@ class CertificationViewModel @Inject constructor(

private val _sideEffect = MutableSharedFlow<CertificationSideEffect>()
val sideEffect: SharedFlow<CertificationSideEffect> = _sideEffect.asSharedFlow()
fun createPhoneNumber() {
fun createCode() {
viewModelScope.launch {
repository.getCertificationNumber(
UserInformation(
name = null,
repository.createCode(
InitialInformation(
name = "Mock-Success-Register",
phone = "01012345678",
type = CertificationType.REGISTER.type
)
).onSuccess {
_sideEffect.emit(CertificationSideEffect.ShowToast("성공"))
_sideEffect.emit(CertificationSideEffect.ShowToast("성공!!!"))
}.onFailure {
_sideEffect.emit(CertificationSideEffect.ShowToast("실패"))
_sideEffect.emit(CertificationSideEffect.ShowToast("실패ㅠㅠ"))
}
}
}

fun certificateCode() {
viewModelScope.launch {
repository.certificateCode(
InformationWithCode(
name = "Mock-Success-Register",
phone = "01012345678",
code = "123456",
type = CertificationType.REGISTER.type
)
).onSuccess {
_sideEffect.emit(CertificationSideEffect.ShowToast("성공!!!"))
}.onFailure {
_sideEffect.emit(CertificationSideEffect.ShowToast("실패ㅠㅠ"))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.sopt.official.data.auth.mapper

import org.sopt.official.data.auth.remote.request.CertificateCodeRequest
import org.sopt.official.data.auth.remote.response.CertificateCodeResponse
import org.sopt.official.domain.auth.model.InformationWithCode
import org.sopt.official.domain.auth.model.VerificationResult

fun InformationWithCode.toRequest(): CertificateCodeRequest =
CertificateCodeRequest(
name = name,
phone = phone,
code = code,
type = type
)

fun CertificateCodeResponse.toDomain() : VerificationResult =
VerificationResult(
isVerified = isVerified,
name = name,
phone = phone
)

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.sopt.official.data.auth.mapper

import org.sopt.official.data.auth.remote.request.CreateCodeRequest
import org.sopt.official.domain.auth.model.InitialInformation

fun InitialInformation.toRequest(): CreateCodeRequest =
CreateCodeRequest(
name = name,
phone = phone,
type = type
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.sopt.official.data.auth.model

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class BaseAuthResponse<T>(
@SerialName("success")
val success: Boolean,
@SerialName("message")
val message: String,
@SerialName("data")
val data: T
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.sopt.official.data.auth.model

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class NonDataBaseAuthResponse(
@SerialName("success")
val success: Boolean,
@SerialName("message")
val message: String,
val data: String?
)
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
package org.sopt.official.data.auth.remote.api

import org.sopt.official.data.auth.remote.request.CertificationNumberRequest
import org.sopt.official.data.auth.remote.response.CertificationNumberResponse
import org.sopt.official.data.auth.model.BaseAuthResponse
import org.sopt.official.data.auth.model.NonDataBaseAuthResponse
import org.sopt.official.data.auth.remote.request.CertificateCodeRequest
import org.sopt.official.data.auth.remote.request.CreateCodeRequest
import org.sopt.official.data.auth.remote.response.CertificateCodeResponse
import retrofit2.http.Body
import retrofit2.http.POST

internal interface AuthApi {
@POST("/api/v1/auth/phone")
suspend fun postCertificationNumber(
@Body request: CertificationNumberRequest,
): CertificationNumberResponse
suspend fun createCode(
@Body request: CreateCodeRequest,
): NonDataBaseAuthResponse

@POST("/api/v1/auth/verify/phone")
suspend fun certificateCode(
@Body request: CertificateCodeRequest,
): BaseAuthResponse<CertificateCodeResponse>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.sopt.official.data.auth.remote.request

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class CertificateCodeRequest(
@SerialName("name")
val name: String?,
@SerialName("phone")
val phone: String,
@SerialName("code")
val code: String,
@SerialName("type")
val type: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class CertificationNumberRequest(
data class CreateCodeRequest(
@SerialName("name")
val name: String?,
@SerialName("phone")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.sopt.official.data.auth.remote.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class CertificateCodeResponse(
@SerialName("isVerified")
val isVerified: Boolean,
@SerialName("name")
val name: String?,
@SerialName("phone")
val phone: String
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
internal data class CertificationNumberResponse(
data class CreateCodeResponse(
@SerialName("success")
val success: Boolean,
@SerialName("message")
val message: String,
@SerialName("data")
val data: String,
val data :String?
)
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
package org.sopt.official.data.auth.repository

import org.sopt.official.data.auth.mapper.toDomain
import org.sopt.official.data.auth.mapper.toRequest
import org.sopt.official.data.auth.remote.api.AuthApi
import org.sopt.official.domain.auth.model.UserInformation
import org.sopt.official.domain.auth.model.InformationWithCode
import org.sopt.official.domain.auth.model.InitialInformation
import org.sopt.official.domain.auth.model.VerificationResult
import org.sopt.official.domain.auth.repository.AuthRepository
import javax.inject.Inject

internal class DefaultAuthRepository @Inject constructor(
private val authApi: AuthApi
) : AuthRepository {
override suspend fun getCertificationNumber(request: UserInformation): Result<Unit> = runCatching {
authApi.postCertificationNumber(request.toRequest())
override suspend fun createCode(request: InitialInformation): Result<Unit> = runCatching {
authApi.createCode(request.toRequest())
}

override suspend fun certificateCode(request: InformationWithCode): Result<VerificationResult> =
runCatching {
authApi.certificateCode(request.toRequest()).data.toDomain()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.sopt.official.domain.auth.model

data class InformationWithCode(
val name: String?,
val phone: String,
val code: String,
val type: String
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.sopt.official.domain.auth.model

data class UserInformation(
data class InitialInformation(
val name: String?,
val phone: String,
val type: String
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.sopt.official.domain.auth.model

data class VerificationResult(
val isVerified: Boolean,
val name: String?,
val phone: String
)
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package org.sopt.official.domain.auth.repository

import org.sopt.official.domain.auth.model.UserInformation
import org.sopt.official.domain.auth.model.InformationWithCode
import org.sopt.official.domain.auth.model.InitialInformation
import org.sopt.official.domain.auth.model.VerificationResult

interface AuthRepository {
suspend fun getCertificationNumber(request: UserInformation) : Result<Unit>
suspend fun createCode(request: InitialInformation): Result<Unit>

suspend fun certificateCode(request: InformationWithCode): Result<VerificationResult>
}

0 comments on commit fc867fe

Please sign in to comment.