From 348509825bcf4a9a7055752a93dac61adc774695 Mon Sep 17 00:00:00 2001 From: Chocolaterie <110991127+Chocolaterie@users.noreply.github.com> Date: Tue, 28 Jan 2025 12:16:09 +0100 Subject: [PATCH] Correction Sign Up --- app/src/main/AndroidManifest.xml | 5 +- .../example/tpfilrouge/auth/AuthService.kt | 3 ++ .../example/tpfilrouge/auth/SignUpActivity.kt | 36 ++++++++++----- .../tpfilrouge/auth/SignUpRequestDTO.kt | 7 +++ .../tpfilrouge/auth/SignUpViewModel.kt | 46 +++++++++++++++++++ 5 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/com/example/tpfilrouge/auth/SignUpRequestDTO.kt create mode 100644 app/src/main/java/com/example/tpfilrouge/auth/SignUpViewModel.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a15121..23736f1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,9 +29,10 @@ android:theme="@style/Theme.TpFilRouge" /> + android:theme="@style/Theme.TpFilRouge"> + + @POST("signup") + suspend fun signup(@Body signUpRequestDTO: SignUpRequestDTO) : ServiceResponseDTO + object AuthApi { val authService : AuthService by lazy { retrofit.create(AuthService::class.java) } } diff --git a/app/src/main/java/com/example/tpfilrouge/auth/SignUpActivity.kt b/app/src/main/java/com/example/tpfilrouge/auth/SignUpActivity.kt index dacc62c..e7132bc 100644 --- a/app/src/main/java/com/example/tpfilrouge/auth/SignUpActivity.kt +++ b/app/src/main/java/com/example/tpfilrouge/auth/SignUpActivity.kt @@ -8,6 +8,8 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource @@ -19,17 +21,29 @@ import com.example.tpfilrouge.ui.theme.EniPage import com.example.tpfilrouge.ui.theme.EniTextField class SignUpActivity : ComponentActivity() { + + var signUpViewModel = SignUpViewModel(); + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { - SignUpActivityPage() + SignUpActivityPage(signUpViewModel) } } } @Composable -fun SignUpActivityPage() { +fun SignUpActivityPage(signUpViewModel: SignUpViewModel) { + // Ecouter et synchronser les champs saisies + val emailField by signUpViewModel.email.collectAsState() + val pseudoField by signUpViewModel.pseudo.collectAsState() + val passwordField by signUpViewModel.password.collectAsState() + val passwordConfirmField by signUpViewModel.passwordConfirm.collectAsState() + val cityCodeField by signUpViewModel.cityCode.collectAsState() + val cityField by signUpViewModel.city.collectAsState() + val phoneField by signUpViewModel.phone.collectAsState() + EniPage { Column( horizontalAlignment = Alignment.CenterHorizontally, @@ -38,14 +52,14 @@ fun SignUpActivityPage() { painter = painterResource(id = R.drawable.sign_up), contentDescription = "Logo SignUp", modifier = Modifier.padding(vertical = 10.dp)) - EniTextField("Pseudo") - EniTextField("Email") - EniTextField("Password") - EniTextField("Password Confirmation") - EniTextField("City Code") - EniTextField("City") - EniTextField("Phone Number") - EniButton("Sign Up", onClick = {}) + EniTextField("Pseudo", value = pseudoField, onValueChange = { value -> signUpViewModel.pseudo.value = value; }) + EniTextField("Email", value = emailField, onValueChange = { value -> signUpViewModel.email.value = value; }) + EniTextField("Password", value = passwordField, onValueChange = { value -> signUpViewModel.password.value = value; }) + EniTextField("Password Confirmation", value = passwordConfirmField, onValueChange = { value -> signUpViewModel.passwordConfirm.value = value; }) + EniTextField("City Code", value = cityCodeField, onValueChange = { value -> signUpViewModel.cityCode.value = value; }) + EniTextField("City", value = cityField, onValueChange = { value -> signUpViewModel.city.value = value; }) + EniTextField("Phone Number", value = phoneField, onValueChange = { value -> signUpViewModel.phone.value = value; }) + EniButton("Sign Up", onClick = { signUpViewModel.callSignUpApi() }) } } } @@ -53,5 +67,5 @@ fun SignUpActivityPage() { @Preview(showBackground = true) @Composable fun SignUpActivityPreview() { - SignUpActivityPage() + SignUpActivityPage(SignUpViewModel()) } \ No newline at end of file diff --git a/app/src/main/java/com/example/tpfilrouge/auth/SignUpRequestDTO.kt b/app/src/main/java/com/example/tpfilrouge/auth/SignUpRequestDTO.kt new file mode 100644 index 0000000..c62b217 --- /dev/null +++ b/app/src/main/java/com/example/tpfilrouge/auth/SignUpRequestDTO.kt @@ -0,0 +1,7 @@ +package com.example.tpfilrouge.auth + +data class SignUpRequestDTO(var email : String, var pseudo : String, + var password : String, var passwordConfirm : String = "", + var cityCode: String, var city: String, var phone : String + ) { +} \ No newline at end of file diff --git a/app/src/main/java/com/example/tpfilrouge/auth/SignUpViewModel.kt b/app/src/main/java/com/example/tpfilrouge/auth/SignUpViewModel.kt new file mode 100644 index 0000000..ea7b34f --- /dev/null +++ b/app/src/main/java/com/example/tpfilrouge/auth/SignUpViewModel.kt @@ -0,0 +1,46 @@ +package com.example.tpfilrouge.auth + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.example.tpfilrouge.helpers.AlertDialogHelpers +import com.example.tpfilrouge.helpers.AppDialogHelpers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.launch + +class SignUpViewModel : ViewModel() { + + var email = MutableStateFlow("velocipastor@gmail.com") + var pseudo = MutableStateFlow("Lepuitdefou") + var password = MutableStateFlow("13456") + var passwordConfirm = MutableStateFlow("13456") + var cityCode = MutableStateFlow("44300") + var city = MutableStateFlow("Nantes") + var phone = MutableStateFlow("0612326699") + + fun callSignUpApi(){ + AppDialogHelpers.get().showDialog("Inscription en cours"); + + viewModelScope.launch { + // Preparer le DTO à envoyer dans request body + // Le DTO qui contient : email et password + val signUpRequestDTO = SignUpRequestDTO(email.value, pseudo.value, password.value, + passwordConfirm.value, cityCode.value, city.value, phone.value); + + // Appel api async + val responseService = AuthService.AuthApi.authService.signup(signUpRequestDTO); + + // Fermer la popup de chargement aprés l'appel de API + AppDialogHelpers.get().closeDialog() + + // Si connexion ok + if (responseService.code.equals("200")){ + //AlertDialogHelpers.get().show(responseService.message, onClose = { onSuccess() }) + AlertDialogHelpers.get().show(responseService.message, onClose = {}) + } + else{ + // Erreur + AlertDialogHelpers.get().show(responseService.message, onClose = {}) + } + } + } +}