Skip to content

Commit

Permalink
Merge pull request #84 from PawWithU/feature/mypage
Browse files Browse the repository at this point in the history
feature/signup: 일반 봉사자 회원가입 api 연결
  • Loading branch information
kang9366 authored Mar 3, 2024
2 parents fbe1c15 + 6ad45c4 commit 270ffee
Show file tree
Hide file tree
Showing 13 changed files with 198 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.kusitms.connectdog.core.data.api

import com.kusitms.connectdog.core.data.api.model.DeleteAccountResponse
import com.kusitms.connectdog.core.data.api.model.IsDuplicateNicknameResponse
import com.kusitms.connectdog.core.data.api.model.LoginResponseItem
import com.kusitms.connectdog.core.data.api.model.MyInfoResponseItem
Expand All @@ -20,7 +21,9 @@ import com.kusitms.connectdog.core.data.api.model.volunteer.BookmarkResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.EmailCertificationBody
import com.kusitms.connectdog.core.data.api.model.volunteer.EmailCertificationResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.IsDuplicateNicknameBody
import com.kusitms.connectdog.core.data.api.model.volunteer.NormalVolunteerSignUpBody
import com.kusitms.connectdog.core.data.api.model.volunteer.NoticeDetailResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.SocialVolunteerSignUpBody
import com.kusitms.connectdog.core.data.api.model.volunteer.UserInfoResponse
import retrofit2.http.Body
import retrofit2.http.DELETE
Expand Down Expand Up @@ -62,12 +65,21 @@ internal interface ApiService {
/**
* 회원가입
*/

@POST("/volunteers/sign-up/email")
suspend fun postEmail(
@Body emailCertificationBody: EmailCertificationBody
): EmailCertificationResponseItem

@POST("/volunteers/sign-up")
suspend fun postNormalVolunteerSignUp(
@Body normalVolunteerSignUpBody: NormalVolunteerSignUpBody
): Unit

@POST("/volunteers/sign-up/social")
suspend fun postSocialVolunteerSignUp(
@Body socialVolunteerSignUpBody: SocialVolunteerSignUpBody
)

/**
* 봉사관리
*/
Expand Down Expand Up @@ -142,6 +154,9 @@ internal interface ApiService {
@GET("/volunteers/my/bookmarks")
suspend fun getBookmarkData(): List<BookmarkResponseItem>

@DELETE("/volunteers/my/delete")
suspend fun deleteAccount(): DeleteAccountResponse

/**
* 이동봉사자 > 공고 상세조회
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.kusitms.connectdog.core.data.api.model.volunteer

data class NormalVolunteerSignUpBody(
val email: String,
val password: String,
val nickname: String,
val profileImageNum: Int,
val isOptionAgr: Boolean = true
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.kusitms.connectdog.core.data.api.model.volunteer

data class SocialVolunteerSignUpBody(
val nickname: String,
val profileImageNum: Int,
val isOptionAgr: Boolean = true
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import com.kusitms.connectdog.core.data.api.model.IsDuplicateNicknameResponse
import com.kusitms.connectdog.core.data.api.model.volunteer.EmailCertificationBody
import com.kusitms.connectdog.core.data.api.model.volunteer.EmailCertificationResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.IsDuplicateNicknameBody
import com.kusitms.connectdog.core.data.api.model.volunteer.NormalVolunteerSignUpBody

interface SignUpRepository {
suspend fun postNickname(nickname: IsDuplicateNicknameBody): IsDuplicateNicknameResponse
suspend fun postEmail(email: EmailCertificationBody): EmailCertificationResponseItem
suspend fun postNormalVolunteerSignUp(signUp: NormalVolunteerSignUpBody): Unit
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.kusitms.connectdog.core.data.api.model.IsDuplicateNicknameResponse
import com.kusitms.connectdog.core.data.api.model.volunteer.EmailCertificationBody
import com.kusitms.connectdog.core.data.api.model.volunteer.EmailCertificationResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.IsDuplicateNicknameBody
import com.kusitms.connectdog.core.data.api.model.volunteer.NormalVolunteerSignUpBody
import javax.inject.Inject

internal class SignUpRepositoryImpl @Inject constructor(
Expand All @@ -17,4 +18,8 @@ internal class SignUpRepositoryImpl @Inject constructor(
override suspend fun postEmail(email: EmailCertificationBody): EmailCertificationResponseItem {
return api.postEmail(email)
}

override suspend fun postNormalVolunteerSignUp(signUp: NormalVolunteerSignUpBody) {
return api.postNormalVolunteerSignUp(signUp)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.kusitms.connectdog.feature.login.loginNavGraph
import com.kusitms.connectdog.feature.management.navigation.managementNavGraph
import com.kusitms.connectdog.feature.mypage.navigation.mypageNavGraph
import com.kusitms.connectdog.signup.signUpGraph
import com.kusitms.connectdog.signup.viewmodel.SignUpViewModel
import com.kusitms.connectdog.signup.viewmodel.VolunteerProfileViewModel
import kotlinx.collections.immutable.toPersistentList

Expand All @@ -46,8 +47,9 @@ internal fun MainScreen(
verifyCode: (String, (Boolean) -> Unit) -> Unit,
imeHeight: Int
) {
val viewModel: VolunteerProfileViewModel = hiltViewModel()
val profileViewModel: VolunteerProfileViewModel = hiltViewModel()
val applyViewModel: ApplyViewModel = hiltViewModel()
val signUpViewModel: SignUpViewModel = hiltViewModel()

Scaffold(
content = {
Expand Down Expand Up @@ -79,7 +81,8 @@ internal fun MainScreen(
navigateToVolunteer = { navigator.navigateHome() },
navigateToIntermediator = { navigator.navigateManageAccount() },
imeHeight = imeHeight,
viewModel = viewModel
signUpViewModel = signUpViewModel,
profileViewModel = profileViewModel
)
homeNavGraph(
onBackClick = navigator::popBackStackIfNotHome,
Expand All @@ -106,10 +109,9 @@ internal fun MainScreen(
)
mypageNavGraph(
padding = it,
onClick = {},
onLogoutClick = { navigator.onLogoutClick() },
onBackClick = navigator::popBackStackIfNotHome,
onEditProfileClick = { navigator.navigateEditProfile() },
onEditProfileClick = { nickname, index -> navigator.navigateEditProfile(nickname, index) },
onManageAccountClick = { navigator.navigateManageAccount() },
onNotificationClick = { navigator.navigateNotification() },
onSettingClick = { navigator.navigateSetting() },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.kusitms.connectdog.signup.screen.intermediator.IntermediatorInformati
import com.kusitms.connectdog.signup.screen.intermediator.IntermediatorProfileScreen
import com.kusitms.connectdog.signup.screen.volunteer.SelectProfileImageScreen
import com.kusitms.connectdog.signup.screen.volunteer.VolunteerProfileScreen
import com.kusitms.connectdog.signup.viewmodel.SignUpViewModel
import com.kusitms.connectdog.signup.viewmodel.VolunteerProfileViewModel

fun NavController.navigateSignup(userType: UserType) {
Expand Down Expand Up @@ -60,7 +61,8 @@ fun NavGraphBuilder.signUpGraph(
navigateToVolunteer: () -> Unit,
navigateToIntermediator: () -> Unit,
imeHeight: Int,
viewModel: VolunteerProfileViewModel
signUpViewModel: SignUpViewModel,
profileViewModel: VolunteerProfileViewModel
) {
val userTypeArgument = listOf(
navArgument("type") {
Expand Down Expand Up @@ -89,6 +91,7 @@ fun NavGraphBuilder.signUpGraph(
onBackClick = onBackClick,
userType = it.arguments!!.getSerializable("type") as UserType,
onNavigateToRegisterPassword = navigateToRegisterPassword,
signUpViewModel = signUpViewModel,
imeHeight = imeHeight
)
}
Expand All @@ -102,6 +105,7 @@ fun NavGraphBuilder.signUpGraph(
onNavigateToIntermediatorProfile = navigateToIntermediatorProfile,
onNavigateToVolunteerProfile = navigateToVolunteerProfile,
userType = it.arguments!!.getSerializable("type") as UserType,
signUpViewModel = signUpViewModel,
imeHeight = imeHeight
)
}
Expand All @@ -112,7 +116,8 @@ fun NavGraphBuilder.signUpGraph(
onNavigateToSelectProfileImage = navigateToSelectProfileImage,
onNavigateToCompleteSignUp = navigateToCompleteSignUp,
imeHeight = imeHeight,
viewModel = viewModel
signUpViewModel = signUpViewModel,
viewModel = profileViewModel
)
}

Expand All @@ -137,7 +142,7 @@ fun NavGraphBuilder.signUpGraph(
) {
SelectProfileImageScreen(
onBackClick = onBackClick,
viewModel = viewModel
viewModel = profileViewModel
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.kusitms.connectdog.signup.screen

import android.annotation.SuppressLint
import android.widget.Toast
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column
Expand All @@ -15,6 +16,7 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardType
Expand All @@ -32,20 +34,24 @@ import com.kusitms.connectdog.core.designsystem.theme.Orange_40
import com.kusitms.connectdog.core.designsystem.theme.PetOrange
import com.kusitms.connectdog.core.util.UserType
import com.kusitms.connectdog.signup.viewmodel.RegisterEmailViewModel
import com.kusitms.connectdog.signup.viewmodel.SignUpViewModel

@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun RegisterEmailScreen(
onBackClick: () -> Unit,
userType: UserType,
onNavigateToRegisterPassword: (UserType) -> Unit,
signUpViewModel: SignUpViewModel,
viewModel: RegisterEmailViewModel = hiltViewModel(),
imeHeight: Int
) {
val focusManager = LocalFocusManager.current
val interactionSource = remember { MutableInteractionSource() }
val context = LocalContext.current
val isValidEmail by viewModel.isValidEmail.collectAsState()
val isEmailVerified by viewModel.isEmailVerified.collectAsState()
val isEmailDuplicated by viewModel.isEmailDuplicated.collectAsState()

Scaffold(
topBar = {
Expand Down Expand Up @@ -84,12 +90,20 @@ fun RegisterEmailScreen(
textFieldLabel = "이메일",
placeholder = "이메일 입력",
buttonLabel = "인증 요청",
isError = isValidEmail ?: false,
isError = (isValidEmail ?: false) || (isEmailDuplicated ?: false),
onTextChanged = {
viewModel.updateEmail(it)
viewModel.updateEmailValidity()
},
onClick = { viewModel.postEmail() },
onClick = {
if (isValidEmail == true) {
Toast.makeText(context, "유효한 이메일을 입력해주세요", Toast.LENGTH_SHORT).show()
} else if (isEmailDuplicated == true) {
Toast.makeText(context, "이미 가입된 이메일입니다.", Toast.LENGTH_SHORT).show()
} else {
viewModel.postEmail()
}
},
padding = 5
)
Spacer(modifier = Modifier.height(12.dp))
Expand All @@ -102,14 +116,25 @@ fun RegisterEmailScreen(
buttonLabel = "인증 확인",
keyboardType = KeyboardType.Number,
onTextChanged = { viewModel.updateCertificationNumber(it) },
onClick = { viewModel.checkCertificationNumber() },
onClick = {
if (it.isNotEmpty()) {
viewModel.checkCertificationNumber()
} else {
Toast.makeText(context, "인증번호를 입력해주세요", Toast.LENGTH_SHORT).show()
}
},
padding = 5
)
Spacer(modifier = Modifier.weight(1f))
ConnectDogNormalButton(
content = "다음",
color = if (isEmailVerified) { PetOrange } else { Orange_40 },
onClick = { if (isEmailVerified) onNavigateToRegisterPassword(userType) },
onClick = {
if (isEmailVerified) {
signUpViewModel.updateEmail(viewModel.email)
onNavigateToRegisterPassword(userType)
}
},
modifier =
Modifier
.fillMaxWidth()
Expand All @@ -124,6 +149,6 @@ fun RegisterEmailScreen(
@Composable
private fun test() {
ConnectDogTheme {
RegisterEmailScreen(onBackClick = {}, userType = UserType.NORMAL_VOLUNTEER, onNavigateToRegisterPassword = {}, imeHeight = 10)
RegisterEmailScreen(onBackClick = {}, userType = UserType.NORMAL_VOLUNTEER, onNavigateToRegisterPassword = {}, hiltViewModel(), imeHeight = 10)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import com.kusitms.connectdog.core.designsystem.theme.Orange_40
import com.kusitms.connectdog.core.designsystem.theme.PetOrange
import com.kusitms.connectdog.core.util.UserType
import com.kusitms.connectdog.signup.viewmodel.RegisterPasswordViewModel
import com.kusitms.connectdog.signup.viewmodel.SignUpViewModel

@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
Expand All @@ -45,6 +46,7 @@ fun RegisterPasswordScreen(
onNavigateToIntermediatorProfile: () -> Unit,
userType: UserType,
imeHeight: Int,
signUpViewModel: SignUpViewModel,
viewModel: RegisterPasswordViewModel = hiltViewModel()
) {
val focusManager = LocalFocusManager.current
Expand Down Expand Up @@ -127,6 +129,7 @@ fun RegisterPasswordScreen(
},
onClick = {
if (isValidPassword == false && isValidConfirmPassword == false) {
signUpViewModel.updatePassword(viewModel.password)
when (userType) {
UserType.INTERMEDIATOR -> onNavigateToIntermediatorProfile()
else -> onNavigateToVolunteerProfile()
Expand All @@ -143,6 +146,6 @@ fun RegisterPasswordScreen(
@Composable
private fun Preview() {
ConnectDogTheme {
RegisterPasswordScreen({}, {}, {}, UserType.INTERMEDIATOR, 10)
RegisterPasswordScreen({}, {}, {}, UserType.INTERMEDIATOR, 10, hiltViewModel())
}
}
Loading

0 comments on commit 270ffee

Please sign in to comment.