From 21276b729b1ac2914f090fb80426f0badb6726cf Mon Sep 17 00:00:00 2001 From: lolaborie Date: Tue, 2 Apr 2024 15:19:20 +0200 Subject: [PATCH] =?UTF-8?q?StubUsers=20+=20connexion=20API=20+=20d=C3=A9bu?= =?UTF-8?q?t=20page=20de=20connexion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/veraxapplication/MainActivity.kt | 13 +++- .../veraxapplication/modele/ApiClientUser.kt | 29 ------- .../modele/IArticlesDataManager.kt | 2 +- .../veraxapplication/modele/UserApiService.kt | 11 --- .../modele/api/IUserService.kt | 11 +++ .../veraxapplication/modele/api/UserDTO.kt | 32 ++++++++ .../modele/api/UsersViewModel.kt | 63 +++++++++++++++ .../modele/articles/StubArticles.kt | 1 + .../veraxapplication/modele/user/StubUsers.kt | 78 +++++++++++++++++++ .../veraxapplication/modele/user/User.kt | 2 +- .../ui/connexion/Connexion.kt | 23 ++++++ .../main/res/xml/network_security_config.xml | 1 + 12 files changed, 223 insertions(+), 43 deletions(-) delete mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiClientUser.kt delete mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/UserApiService.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/IUserService.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/UserDTO.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/UsersViewModel.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/user/StubUsers.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/connexion/Connexion.kt diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index a5e5acb..2b35a23 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -1,6 +1,8 @@ package com.example.veraxapplication import ArticlesViewModel +import IUsersDataManager +import StubUsers import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent @@ -8,9 +10,11 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.lifecycle.viewmodel.compose.viewModel -import com.example.veraxapplication.articles.IArticlesDataManager +import com.example.veraxapplication.modele.IArticlesDataManager import com.example.veraxapplication.articles.StubArticles +import com.example.veraxapplication.modele.api.UsersViewModel import com.example.veraxapplication.navigation.VeraxNavHost +import com.example.veraxapplication.ui.connexion.AfficherForm import com.example.veraxapplication.ui.topBar.TopBarVerax // doc navBar: https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#TopAppBar(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function1,androidx.compose.foundation.layout.WindowInsets,androidx.compose.material3.TopAppBarColors,androidx.compose.material3.TopAppBarScrollBehavior) @@ -37,12 +41,19 @@ fun VeraxContent() { var dataManager: IArticlesDataManager = StubArticles() var articles = dataManager.getDerniersArticles(4) + var usersManager: IUsersDataManager = StubUsers() + var users = usersManager.getUsers(); + // Observer les données du ViewModel val articlesViewModel: ArticlesViewModel = viewModel() // Observez les articles du ViewModel val articlesApi by articlesViewModel.articles.observeAsState(initial = articles) + val usersViewModel: UsersViewModel = viewModel() + + val usersApi by usersViewModel.users.observeAsState(initial = users) + var theme = listOf("Economique", "Culture", "Politique", "Faits divers") diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiClientUser.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiClientUser.kt deleted file mode 100644 index cdb6369..0000000 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiClientUser.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.example.veraxapplication.modele - -import com.example.veraxapplication.modele.user.User -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory -import retrofit2.http.GET - -object RetrofitClientUser { - - private const val BASE_URL = "https://codefirst.iut.uca.fr/containers/Verax-verax-api" - - val retrofit: Retrofit by lazy { - Retrofit.Builder() - .baseUrl(BASE_URL) - .addConverterFactory(GsonConverterFactory.create()) - .build() - } - -// interface UserApiService { -// @GET("users") -// suspend fun getUsers() : List -// } -} - - object ApiClientUser { - val apiService: UserApiService by lazy { - RetrofitClientUser.retrofit.create(UserApiService::class.java) - } - } \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt index f6f4a1d..707c729 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt @@ -1,4 +1,4 @@ -package com.example.veraxapplication.articles +package com.example.veraxapplication.modele import com.example.veraxapplication.modele.articles.Article diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/UserApiService.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/UserApiService.kt deleted file mode 100644 index 1d37c15..0000000 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/UserApiService.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.veraxapplication.modele - -import com.example.veraxapplication.modele.user.User -import retrofit2.Call -import retrofit2.http.GET - -interface UserApiService { - @GET("users/") - suspend fun getUsers(): Call> - -} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/IUserService.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/IUserService.kt new file mode 100644 index 0000000..ed16f51 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/IUserService.kt @@ -0,0 +1,11 @@ +package com.example.veraxapplication.modele.api + +import com.example.veraxapplication.modele.user.User +import retrofit2.Call +import retrofit2.http.GET + +interface IUserService { + @GET("users") + suspend fun getUsers(): List + +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/UserDTO.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/UserDTO.kt new file mode 100644 index 0000000..1110409 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/UserDTO.kt @@ -0,0 +1,32 @@ +package com.example.veraxapplication.modele.api + +import com.example.veraxapplication.modele.user.User +import com.google.gson.annotations.SerializedName + +data class UserDTO ( + + @SerializedName("pseudo") + val pseudo: String, + @SerializedName("mdp") + val mdp: String, + @SerializedName("mail") + val mail: String, + @SerializedName("nom") + val nom: String, + @SerializedName("prenom") + val prenom: String, + @SerializedName("role") + val role: String, + + ) { + fun toModel(): User { + return User( + pseudo, + mdp, + mail, + nom, + prenom, + role, + ) + } +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/UsersViewModel.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/UsersViewModel.kt new file mode 100644 index 0000000..896ae8c --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/api/UsersViewModel.kt @@ -0,0 +1,63 @@ +package com.example.veraxapplication.modele.api + +import android.util.Log +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.example.veraxapplication.modele.articles.Article +import com.example.veraxapplication.modele.user.User +import kotlinx.coroutines.launch +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +object RetrofitClientUser { + + private const val BASE_URL = "https://codefirst.iut.uca.fr/containers/Verax-verax-api" + + private val logging = HttpLoggingInterceptor().apply { + level = HttpLoggingInterceptor.Level.BODY + } + + private val httpClient = OkHttpClient.Builder().apply { + addInterceptor(logging) + }.build() + + + val retrofit: Retrofit by lazy { + Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + +// interface UserApiService { +// @GET("users") +// suspend fun getUsers() : List +// } +} + +class UsersViewModel : ViewModel() { + private val _users = MutableLiveData>() + val users: LiveData> = _users + + private val service = ArticleApiClient.retrofit.create(IUserService::class.java) + + init { + loadUsers() + } + + fun loadUsers() { + viewModelScope.launch { + try { + val usersDto = service.getUsers() // Pas besoin d'appeler .execute() + // Convertissez les DTO en modèles de données si nécessaire + _users.value = usersDto.map { it.toModel() } + } catch (e: Exception) { + Log.e("UsersViewModel", "Erreur lors du chargement des users", e) + } + } + } +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt index d1a1124..61d61eb 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt @@ -1,5 +1,6 @@ package com.example.veraxapplication.articles +import com.example.veraxapplication.modele.IArticlesDataManager import com.example.veraxapplication.modele.articles.Article import com.example.veraxapplication.modele.articles.contenus.Contenu import com.example.veraxapplication.modele.articles.contenus.ContenuMedia diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/user/StubUsers.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/user/StubUsers.kt new file mode 100644 index 0000000..a0f4bb1 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/user/StubUsers.kt @@ -0,0 +1,78 @@ + +import com.example.veraxapplication.modele.IArticlesDataManager +import com.example.veraxapplication.modele.articles.Article +import com.example.veraxapplication.modele.articles.contenus.Contenu +import com.example.veraxapplication.modele.articles.contenus.ContenuMedia +import com.example.veraxapplication.modele.articles.contenus.ContenuParagraphe +import com.example.veraxapplication.modele.user.User + + +class StubUsers() : IUsersDataManager { + private var lUsers: MutableList? = null + + init { + chargerUsers() + } + + + private fun chargerUsers() { + lUsers = java.util.ArrayList() + val user1 = User ( + "NoaSil", + "1234", + "", + "Sillard", + "Noa", + "Admin" + ) + lUsers!!.add(user1) + val user2 = User ( + "Sha", + "1234", + "", + "Cascarra", + "Shana", + "Admin" + ) + lUsers!!.add(user2) + val user3 = User ( + "TonyF", + "1234", + "tony@gmail.com", + "Fages", + "Tony", + "Admin" + ) + lUsers!!.add(user3) + val user4 = User ( + "JeanSwaggLaPuissance63", + "1234", + "jean.lapuissance@gmail.com", + "Marcillac", + "Jean", + "Admin" + ) + lUsers!!.add(user4) + } + + override val allUsers: List? + get() = lUsers + + override fun getUser(pseudo : String): User? { + println("Passage dans getUser avec comme pseudo : $pseudo") + lUsers?.let { + println("Nombre d'utilisateurs disponibles : ${it.size}") + + val userARenvoyer: User? = it.find { user -> user.pseudo == pseudo } + + return userARenvoyer + } + return null + } + + override fun getUsers(): List + { + return lUsers?.takeIf { it.isNotEmpty() }?.take(lUsers!!.size) ?: emptyList() + } + +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/user/User.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/user/User.kt index 9121d34..eafab4d 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/user/User.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/user/User.kt @@ -1,3 +1,3 @@ package com.example.veraxapplication.modele.user -data class User(val pseudo : String, val mdp : String, val mail : String, val nom : String, val prenom : String, val role : Char) \ No newline at end of file +data class User(val pseudo : String, val mdp : String, val mail : String, val nom : String, val prenom : String, val role : String) \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/connexion/Connexion.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/connexion/Connexion.kt new file mode 100644 index 0000000..6d85f4d --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/connexion/Connexion.kt @@ -0,0 +1,23 @@ +package com.example.veraxapplication.ui.connexion + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.example.veraxapplication.modele.user.User + +@Composable +fun AfficherForm(users : List) { + var pseudo = "DEFAULT" + var mdp = "DEFAULT" + Column { + TextField(value = "Pseudo", onValueChange = { value -> pseudo = value }, modifier = Modifier.padding(5.dp)) + TextField(value = "Mot de passe", onValueChange = { value -> mdp = value }, modifier = Modifier.padding(5.dp)) + for (u in users) { + Text(text = u.pseudo) + } + } +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/res/xml/network_security_config.xml b/Android/VeraxApplication/app/src/main/res/xml/network_security_config.xml index 1208de3..2f387a3 100644 --- a/Android/VeraxApplication/app/src/main/res/xml/network_security_config.xml +++ b/Android/VeraxApplication/app/src/main/res/xml/network_security_config.xml @@ -2,5 +2,6 @@ 181.214.189.133 + codefirst.iut.uca.fr/containers/Verax-verax-api \ No newline at end of file