Skip to content

Commit

Permalink
Merge pull request #106 from Team-HealthC/feature/#104
Browse files Browse the repository at this point in the history
Feature/#104
  • Loading branch information
jeongjaino committed Nov 18, 2023
2 parents faecfeb + a4b5e20 commit 47297a8
Show file tree
Hide file tree
Showing 38 changed files with 778 additions and 583 deletions.
4 changes: 2 additions & 2 deletions client/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
android:supportsRtl="true"
android:theme="@style/Theme.HealthC">
<activity
android:name=".presentation.home.SplashActivity"
android:name=".presentation.splash.SplashActivity"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand All @@ -29,7 +29,7 @@
</intent-filter>
</activity>
<activity
android:name=".presentation.home.MainActivity"
android:name=".presentation.main.MainActivity"
android:exported="true" />
<activity
android:name=".presentation.auth.AuthActivity"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ class AuthViewModel @Inject constructor(
private val signUpUseCase: SignUpUseCase
) : ViewModel() {

private val _validationEvent = MutableSharedFlow<AuthEvent>()
val validationEvent: SharedFlow<AuthEvent> get() = _validationEvent
private val _validationEvent = MutableSharedFlow<ValidateEvent>()
val validationEvent: SharedFlow<ValidateEvent> get() = _validationEvent

private val _signUpEvent = MutableSharedFlow<AuthEvent>()
val signUpEvent: SharedFlow<AuthEvent> get() = _signUpEvent
Expand All @@ -36,40 +36,45 @@ class AuthViewModel @Inject constructor(
val name: MutableStateFlow<String> = MutableStateFlow<String>("")
private val allergies: MutableStateFlow<List<String>> = MutableStateFlow(emptyList())

fun validateEmail(){
viewModelScope.launch {
val validateEmailUseCase = ValidateEmailUseCase()
val result = validateEmailUseCase(email.value)
if(result.successful){
_validationEvent.emit(AuthEvent.Success)
}else{
_validationEvent.emit(AuthEvent.Failure(result.errorMessage))
fun validateInput() {
if(validateName() && validateEmail() && validatePassword()) {
viewModelScope.launch {
_validationEvent.emit(ValidateEvent.Success)
}
}
}

fun validatePassword(){
viewModelScope.launch {
val validatePasswordUseCase = ValidatePasswordUseCase()
val result = validatePasswordUseCase(password.value)
if(result.successful){
_validationEvent.emit(AuthEvent.Success)
}else{
_validationEvent.emit(AuthEvent.Failure(result.errorMessage))
private fun validateEmail() : Boolean {
val validateEmailUseCase = ValidateEmailUseCase()
val result = validateEmailUseCase(email.value)
if (result.successful.not()) {
viewModelScope.launch {
_validationEvent.emit(ValidateEvent.InvalidEmail(result.errorMessage))
}
}
return result.successful
}

fun validateName(){
viewModelScope.launch {
val validateNameUseCase = ValidateNameUseCase()
val result = validateNameUseCase(name.value)
if(result.successful){
_validationEvent.emit(AuthEvent.Success)
}else{
_validationEvent.emit(AuthEvent.Failure(result.errorMessage))
private fun validatePassword() : Boolean{
val validatePasswordUseCase = ValidatePasswordUseCase()
val result = validatePasswordUseCase(password.value)
if (result.successful.not()) {
viewModelScope.launch {
_validationEvent.emit(ValidateEvent.InvalidPassword(result.errorMessage))
}
}
return result.successful
}

private fun validateName() : Boolean{
val validateNameUseCase = ValidateNameUseCase()
val result = validateNameUseCase(name.value)
if (result.successful.not()) {
viewModelScope.launch {
_validationEvent.emit(ValidateEvent.InvalidName(result.errorMessage))
}
}
return result.successful
}

fun setAllergy(allergyList : List<String>){
Expand Down Expand Up @@ -107,12 +112,19 @@ class AuthViewModel @Inject constructor(
password.value = TEXT_EMPTY
}

companion object{
const val TEXT_EMPTY = ""
sealed class ValidateEvent {
data class InvalidName(val message: String?) : ValidateEvent()
data class InvalidEmail(val message: String?) : ValidateEvent()
data class InvalidPassword(val message: String?) : ValidateEvent()
data object Success : ValidateEvent()
}

sealed class AuthEvent {
data class Failure(val message: String?) : AuthEvent()
object Success : AuthEvent()
data class Failure(val message: String?): AuthEvent()
data object Success : AuthEvent()
}

companion object{
const val TEXT_EMPTY = ""
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import com.healthc.app.R
import com.healthc.app.databinding.FragmentLoginBinding
import com.healthc.app.presentation.auth.AuthViewModel
import com.healthc.app.presentation.auth.AuthViewModel.AuthEvent
import com.healthc.app.presentation.home.MainActivity
import com.healthc.app.presentation.main.MainActivity
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
Expand Down Expand Up @@ -70,7 +70,7 @@ class LoginFragment : Fragment() {
}

private fun navigateSignUp(){
val direction = LoginFragmentDirections.actionLoginFragmentToUserNameFragment()
val direction = LoginFragmentDirections.actionLoginFragmentToRegisterInformationFragment()
findNavController().navigate(direction)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,29 +13,28 @@ import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import com.healthc.app.R
import com.healthc.app.databinding.FragmentUserInfoBinding
import com.healthc.app.presentation.auth.AuthViewModel
import com.healthc.app.presentation.auth.AuthViewModel.AuthEvent
import com.healthc.app.presentation.home.MainActivity
import com.healthc.app.presentation.main.MainActivity
import com.google.android.material.chip.Chip
import com.healthc.app.databinding.FragmentRegisterAllergyBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach

@AndroidEntryPoint
class UserInfoFragment : Fragment() {
class RegisterAllergyFragment : Fragment() {

private var _binding: FragmentUserInfoBinding? = null
private var _binding: FragmentRegisterAllergyBinding? = null
private val binding get() = requireNotNull(_binding)

private val viewModel by activityViewModels<AuthViewModel>()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_user_info, container, false)
_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_register_allergy, container, false)
binding.viewModel = viewModel
binding.lifecycleOwner = viewLifecycleOwner
return binding.root
Expand All @@ -60,6 +59,7 @@ class UserInfoFragment : Fragment() {
findNavController().popBackStack()
}
}

private fun observeData(){
viewModel.signUpEvent.flowWithLifecycle(viewLifecycleOwner.lifecycle)
.onEach {
Expand All @@ -69,7 +69,11 @@ class UserInfoFragment : Fragment() {
}

is AuthEvent.Failure -> {
Toast.makeText(requireContext(), "회원가입에 실패하였습니다.", Toast.LENGTH_SHORT).show()
Toast.makeText(
requireContext(),
"회원가입에 실패하였습니다.",
Toast.LENGTH_SHORT
).show()
}
}
}.launchIn(viewLifecycleOwner.lifecycleScope)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@ import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import com.healthc.app.R
import com.healthc.app.databinding.FragmentUserNameBinding
import com.healthc.app.databinding.FragmentRegisterInformationBinding
import com.healthc.app.presentation.auth.AuthViewModel
import com.healthc.app.presentation.auth.AuthViewModel.AuthEvent
import com.healthc.app.presentation.auth.AuthViewModel.ValidateEvent
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach

@AndroidEntryPoint
class UserNameFragment : Fragment() {
class RegisterInformationFragment : Fragment() {

private var _binding: FragmentUserNameBinding? = null
private var _binding: FragmentRegisterInformationBinding? = null
private val binding get() = requireNotNull(_binding)

private val viewModel by activityViewModels<AuthViewModel>()
Expand All @@ -31,7 +31,7 @@ class UserNameFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_user_name, container, false)
_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_register_information, container, false)
binding.viewModel = viewModel
binding.lifecycleOwner = viewLifecycleOwner
return binding.root
Expand All @@ -54,12 +54,18 @@ class UserNameFragment : Fragment() {
viewModel.validationEvent.flowWithLifecycle(viewLifecycleOwner.lifecycle)
.onEach {
when (it) {
is AuthEvent.Success -> {
is ValidateEvent.Success -> {
navigateToEmail()
}
is AuthEvent.Failure -> {
is ValidateEvent.InvalidName -> {
binding.signUpNameLayout.error = it.message
}
is ValidateEvent.InvalidEmail -> {
binding.signUpEmailLayout.error = it.message
}
is ValidateEvent.InvalidPassword -> {
binding.signUpPasswordEditLayout.error = it.message
}
}
}.launchIn(viewLifecycleOwner.lifecycleScope)
}
Expand All @@ -69,7 +75,8 @@ class UserNameFragment : Fragment() {
}

private fun navigateToEmail() {
val direction = UserNameFragmentDirections.actionUserNameFragmentToUserEmailFragment()
val direction = RegisterInformationFragmentDirections
.actionRegisterInformationFragmentToRegisterAllergyFragment()
findNavController().navigate(direction)
}

Expand Down

This file was deleted.

Loading

0 comments on commit 47297a8

Please sign in to comment.