From 0d022846c0e244513fdc6495d6c5d8f54cdabd00 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Mon, 1 Apr 2024 17:08:39 +0200 Subject: [PATCH 01/18] [ADD] Repo pour injecter fournisseur (et pouvoir tester vm) --- .idea/deploymentTargetDropDown.xml | 15 +-------- .../ViewModels/ScientifiquesDecouvertsVM.kt | 33 ++++++++++++++++--- .../Scientifique/ScientifiquesRequestor.kt | 32 ------------------ .../scientifique/IScientifiqueRepository.kt | 9 +++++ .../scientifique/ScientifqueAPIRepository.kt | 32 ++++++++++++++++++ 5 files changed, 71 insertions(+), 50 deletions(-) delete mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiquesRequestor.kt create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/IScientifiqueRepository.kt create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifqueAPIRepository.kt diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 31d6335..0c0c338 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -3,20 +3,7 @@ - - - - - - - - - - - - - - + diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt index f2e3f0e..530548c 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt @@ -7,18 +7,25 @@ import androidx.compose.runtime.toMutableStateList import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY +import androidx.lifecycle.createSavedStateHandle import androidx.lifecycle.viewModelScope +import androidx.lifecycle.viewmodel.CreationExtras import fr.iut.sciencequest.ViewModels.UiStates.ScientifiqueDecouvertsUIState import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.metier.Scientifique +import fr.iut.sciencequest.model.repositories.scientifique.IScientifiqueRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch -class ScientifiquesDecouvertsVM : ViewModel() { - var listeScientifique: MutableStateFlow = MutableStateFlow(ScientifiqueDecouvertsUIState()) +class ScientifiquesDecouvertsVM( + val repository: IScientifiqueRepository, + var listeScientifique: MutableStateFlow = MutableStateFlow(ScientifiqueDecouvertsUIState()) +) : ViewModel() { // fun getScientifiqueById(id: Int) { // Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id") @@ -30,9 +37,27 @@ class ScientifiquesDecouvertsVM : ViewModel() { fun getScientifiques(page: Int) { Log.d("ViewModelScientifique","Recup la liste de scientifiques") viewModelScope.launch { - fetchScientifiques(page).collect { - listeScientifique.value = ScientifiqueDecouvertsUIState(it.scientifiques.ToModel().toMutableList()) + repository.fetchScientifiques(page).collect { + listeScientifique.value = ScientifiqueDecouvertsUIState(it.toMutableList()) } } } + companion object { + + val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { + @Suppress("UNCHECKED_CAST") + override fun create( + modelClass: Class, + extras: CreationExtras + ): T { + // Get the Application object from extras + val application = checkNotNull(extras[APPLICATION_KEY]) + // Create a SavedStateHandle for this ViewModel from extras + val savedStateHandle = extras.createSavedStateHandle() + + return ScientifiquesDecouvertsVM( + + ) as T + } + } } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiquesRequestor.kt b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiquesRequestor.kt deleted file mode 100644 index 519a8ed..0000000 --- a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiquesRequestor.kt +++ /dev/null @@ -1,32 +0,0 @@ -package fr.iut.sciencequest.model.buisness.Scientifique - -import android.util.Log -import fr.iut.sciencequest.model.buisness.createRequestService -import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueDTO -import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueListDTO -import kotlinx.coroutines.flow.flow -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response -import retrofit2.create -import java.lang.IllegalArgumentException - -suspend fun fetchScientifiqueById(id: Int) = flow { - val serviceClient = createRequestService().create() - try { - val response = serviceClient.getScientifique(id) - emit(response) - } catch (e: Exception) { - Log.e("Requete API",e.message.toString()) - } -} - -fun fetchScientifiques(index: Int) = flow { - val serviceClient = createRequestService().create() - try { - val response = serviceClient.getScientifiques(index) - emit(response) - } catch (e: Exception) { - Log.e("Requete API",e.message.toString()) - } -} \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/IScientifiqueRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/IScientifiqueRepository.kt new file mode 100644 index 0000000..f99b056 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/IScientifiqueRepository.kt @@ -0,0 +1,9 @@ +package fr.iut.sciencequest.model.repositories.scientifique + +import fr.iut.sciencequest.model.metier.Scientifique +import kotlinx.coroutines.flow.Flow + +interface IScientifiqueRepository { + suspend fun fetchScientifiques(index: Int): Flow> + suspend fun fetchScientifiqueById(id: Int): Flow +} \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifqueAPIRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifqueAPIRepository.kt new file mode 100644 index 0000000..49953ff --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifqueAPIRepository.kt @@ -0,0 +1,32 @@ +package fr.iut.sciencequest.model.repositories.scientifique + +import android.util.Log +import fr.iut.sciencequest.model.buisness.Scientifique.ScientifiqueRequestService +import fr.iut.sciencequest.model.buisness.createRequestService +import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.metier.Scientifique +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import retrofit2.create + +class ScientifqueAPIRepository: IScientifiqueRepository { + suspend override fun fetchScientifiqueById(id: Int): Flow = flow { + val serviceClient = createRequestService().create() + try { + val response = serviceClient.getScientifique(id) + emit(response.ToModel()) + } catch (e: Exception) { + Log.e("Requete API",e.message.toString()) + } + } + + suspend override fun fetchScientifiques(index: Int): Flow> = flow { + val serviceClient = createRequestService().create() + try { + val response = serviceClient.getScientifiques(index) + emit(response.scientifiques.ToModel()) + } catch (e: Exception) { + Log.e("Requete API",e.message.toString()) + } + } +} \ No newline at end of file From dae9bb2064734b1923b59e242dfd4d4606b4c237 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 13:37:38 +0200 Subject: [PATCH 02/18] [FIX] Typo --- .idea/modules/app/ScienceQuest.app.iml | 8 ++++++++ ...ifqueAPIRepository.kt => ScientifiqueAPIRepository.kt} | 0 2 files changed, 8 insertions(+) create mode 100644 .idea/modules/app/ScienceQuest.app.iml rename android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/{ScientifqueAPIRepository.kt => ScientifiqueAPIRepository.kt} (100%) diff --git a/.idea/modules/app/ScienceQuest.app.iml b/.idea/modules/app/ScienceQuest.app.iml new file mode 100644 index 0000000..22a61f9 --- /dev/null +++ b/.idea/modules/app/ScienceQuest.app.iml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifqueAPIRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt similarity index 100% rename from android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifqueAPIRepository.kt rename to android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt From 6e27dac780f83061b562f797a6acbaf6bc4f5a25 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 13:39:18 +0200 Subject: [PATCH 03/18] [FIX] Factory fonctionnelle --- .../ViewModels/ScientifiquesDecouvertsVM.kt | 34 +++++-------------- .../scientifique/ScientifiqueAPIRepository.kt | 2 +- .../scientifiques/ScientifiqueListeScreen.kt | 5 ++- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt index 530548c..df79854 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt @@ -1,32 +1,21 @@ package fr.iut.sciencequest.ViewModels import android.util.Log -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateListOf -import androidx.compose.runtime.toMutableStateList -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY -import androidx.lifecycle.createSavedStateHandle import androidx.lifecycle.viewModelScope -import androidx.lifecycle.viewmodel.CreationExtras import fr.iut.sciencequest.ViewModels.UiStates.ScientifiqueDecouvertsUIState -import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById -import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques -import fr.iut.sciencequest.model.dto.extensions.ToModel -import fr.iut.sciencequest.model.metier.Scientifique import fr.iut.sciencequest.model.repositories.scientifique.IScientifiqueRepository +import fr.iut.sciencequest.model.repositories.scientifique.ScientifiqueAPIRepository import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch class ScientifiquesDecouvertsVM( - val repository: IScientifiqueRepository, - var listeScientifique: MutableStateFlow = MutableStateFlow(ScientifiqueDecouvertsUIState()) + val repository: IScientifiqueRepository ) : ViewModel() { - + private val _listeScientifique: MutableStateFlow = MutableStateFlow(ScientifiqueDecouvertsUIState()) + val listeScientifique = _listeScientifique.asStateFlow() // fun getScientifiqueById(id: Int) { // Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id") // var scientifique: Scientifique @@ -38,7 +27,7 @@ class ScientifiquesDecouvertsVM( Log.d("ViewModelScientifique","Recup la liste de scientifiques") viewModelScope.launch { repository.fetchScientifiques(page).collect { - listeScientifique.value = ScientifiqueDecouvertsUIState(it.toMutableList()) + _listeScientifique.value = ScientifiqueDecouvertsUIState(it.toMutableList()) } } } @@ -47,17 +36,12 @@ class ScientifiquesDecouvertsVM( val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create( - modelClass: Class, - extras: CreationExtras + modelClass: Class ): T { - // Get the Application object from extras - val application = checkNotNull(extras[APPLICATION_KEY]) - // Create a SavedStateHandle for this ViewModel from extras - val savedStateHandle = extras.createSavedStateHandle() - return ScientifiquesDecouvertsVM( - + ScientifiqueAPIRepository() ) as T } } + } } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt index 49953ff..746e1af 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import retrofit2.create -class ScientifqueAPIRepository: IScientifiqueRepository { +class ScientifiqueAPIRepository: IScientifiqueRepository { suspend override fun fetchScientifiqueById(id: Int): Flow = flow { val serviceClient = createRequestService().create() try { diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt index 6431a3a..9cec033 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt @@ -3,6 +3,7 @@ package fr.iut.sciencequest.view.scientifiques import android.util.Log import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.res.stringResource @@ -25,7 +26,9 @@ fun scientifiqueListeScreen(viewModel: ScientifiquesDecouvertsVM = viewModel(), TopBar(goToAccount, goToHome, stringResource(id = R.string.sc_decouverts)) }, ) { innerPadding -> - viewModel.getScientifiques(1) + LaunchedEffect(key1 = Unit) { + viewModel.getScientifiques(1) + } scientifiqueListeContainer(liste.scientifiques, innerPadding) } } \ No newline at end of file From ae707b04943f3f79735ba3d5b1eb727c6c15ba5a Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:05:56 +0200 Subject: [PATCH 04/18] [ADD] Reponse simple --- .idea/modules/app/ScienceQuest.app.iml | 8 ------- .../buisness/Question/QuestionRequestor.kt | 22 ------------------- .../model/metier/{ => question}/Question.kt | 0 .../model/metier/{ => reponse}/Reponse.kt | 0 .../model/metier/reponse/ReponseSimple.kt | 11 ++++++++++ 5 files changed, 11 insertions(+), 30 deletions(-) delete mode 100644 .idea/modules/app/ScienceQuest.app.iml delete mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/buisness/Question/QuestionRequestor.kt rename android/app/src/main/java/fr/iut/sciencequest/model/metier/{ => question}/Question.kt (100%) rename android/app/src/main/java/fr/iut/sciencequest/model/metier/{ => reponse}/Reponse.kt (100%) create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/ReponseSimple.kt diff --git a/.idea/modules/app/ScienceQuest.app.iml b/.idea/modules/app/ScienceQuest.app.iml deleted file mode 100644 index 22a61f9..0000000 --- a/.idea/modules/app/ScienceQuest.app.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Question/QuestionRequestor.kt b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Question/QuestionRequestor.kt deleted file mode 100644 index 3a0652c..0000000 --- a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Question/QuestionRequestor.kt +++ /dev/null @@ -1,22 +0,0 @@ -package fr.iut.sciencequest.model.buisness.Question - -import android.util.Log -import fr.iut.sciencequest.model.buisness.Scientifique.ScientifiqueRequestService -import fr.iut.sciencequest.model.buisness.createRequestService -import fr.iut.sciencequest.model.dto.question.QuestionListDTO -import kotlinx.coroutines.flow.flow -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response -import retrofit2.create -import java.lang.IllegalArgumentException - -suspend fun fetchQuestions(index: Int) = flow { - val serviceClient = createRequestService().create() - try { - val response = serviceClient.getQuestions(index) - emit(response) - } catch (e: Exception) { - Log.e("Requete API Question",e.message.toString()) - } -} diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/metier/Question.kt b/android/app/src/main/java/fr/iut/sciencequest/model/metier/question/Question.kt similarity index 100% rename from android/app/src/main/java/fr/iut/sciencequest/model/metier/Question.kt rename to android/app/src/main/java/fr/iut/sciencequest/model/metier/question/Question.kt diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/metier/Reponse.kt b/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/Reponse.kt similarity index 100% rename from android/app/src/main/java/fr/iut/sciencequest/model/metier/Reponse.kt rename to android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/Reponse.kt diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/ReponseSimple.kt b/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/ReponseSimple.kt new file mode 100644 index 0000000..44f8dd7 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/ReponseSimple.kt @@ -0,0 +1,11 @@ +package fr.iut.sciencequest.model.metier.reponse + +class SimpleResponse { + val id: Int + val reponse: String + + constructor(id: Int, reponse: String) { + this.id = id + this.reponse = reponse + } +} \ No newline at end of file From 01cb8d35eb8dc446e480d59839384dff93e97925 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:06:48 +0200 Subject: [PATCH 05/18] [ADD] QuestionWithSimpleReponse model --- .../iut/sciencequest/model/metier/question/Question.kt | 5 ++++- .../model/metier/question/QuestionWithSimpleReponse.kt | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/metier/question/QuestionWithSimpleReponse.kt diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/metier/question/Question.kt b/android/app/src/main/java/fr/iut/sciencequest/model/metier/question/Question.kt index d6c1550..d0b7802 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/metier/question/Question.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/metier/question/Question.kt @@ -1,4 +1,7 @@ -package fr.iut.sciencequest.model.metier +package fr.iut.sciencequest.model.metier.question + +import fr.iut.sciencequest.model.metier.reponse.Reponse + class Question( val id: Int, val question: String, diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/metier/question/QuestionWithSimpleReponse.kt b/android/app/src/main/java/fr/iut/sciencequest/model/metier/question/QuestionWithSimpleReponse.kt new file mode 100644 index 0000000..19f39a9 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/metier/question/QuestionWithSimpleReponse.kt @@ -0,0 +1,10 @@ +package fr.iut.sciencequest.model.metier.question + +import fr.iut.sciencequest.model.metier.reponse.Reponse +import fr.iut.sciencequest.model.metier.reponse.ReponseSimple + +class QuestionWithSimpleReponse ( + val id: Int, + val question: String, + val reponses: List +) \ No newline at end of file From 1d5cc3e00973f72550b926d32af08b515ff9e35f Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:07:27 +0200 Subject: [PATCH 06/18] =?UTF-8?q?[ADD]=20M=C3=A9thodes=20extension=20ToMod?= =?UTF-8?q?el=20pour=20Question=20et=20Reponses=20simples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/dto/extensions/QuestionExtension.kt | 30 +++++++++++++++ .../QuestionWithSimpleReponseExtension.kt | 20 ++++++++++ .../model/dto/extensions/ReponseExtension.kt | 37 +++++++++++++++++++ .../dto/extensions/SimpleReponseExtension.kt | 19 ++++++++++ 4 files changed, 106 insertions(+) create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/QuestionExtension.kt create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/QuestionWithSimpleReponseExtension.kt create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/ReponseExtension.kt create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/SimpleReponseExtension.kt diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/QuestionExtension.kt b/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/QuestionExtension.kt new file mode 100644 index 0000000..b42908e --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/QuestionExtension.kt @@ -0,0 +1,30 @@ +package fr.iut.sciencequest.model.dto.extensions + +import fr.iut.sciencequest.model.dto.question.QuestionDTO +import fr.iut.sciencequest.model.dto.question.QuestionWithSimpleResponseDTO +import fr.iut.sciencequest.model.metier.question.Question +import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse + +fun QuestionDTO.ToModel(): Question { + return Question( + this.id, + this.question, + this.reponses.ToModel() + ) +} + +fun List.ToModel(): List { + val liste = mutableListOf() + for (question in this) { + liste.add(question.ToModel()) + } + return liste +} + +fun Question.ToQuestionWithSimpleReponse(): QuestionWithSimpleReponse { + return QuestionWithSimpleReponse( + this.id, + this.question, + this.reponses.ToSimpleReponses() + ) +} \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/QuestionWithSimpleReponseExtension.kt b/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/QuestionWithSimpleReponseExtension.kt new file mode 100644 index 0000000..c0587e4 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/QuestionWithSimpleReponseExtension.kt @@ -0,0 +1,20 @@ +package fr.iut.sciencequest.model.dto.extensions + +import fr.iut.sciencequest.model.dto.question.QuestionWithSimpleResponseDTO +import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse + +fun QuestionWithSimpleResponseDTO.ToModel(): QuestionWithSimpleReponse { + return QuestionWithSimpleReponse( + this.id, + this.question, + this.reponses.ToModel() + ) +} + +fun List.ToModel(): List { + val liste = ArrayList() + for (question in this) { + liste.add(question.ToModel()) + } + return liste +} \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/ReponseExtension.kt b/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/ReponseExtension.kt new file mode 100644 index 0000000..eca76bd --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/ReponseExtension.kt @@ -0,0 +1,37 @@ +package fr.iut.sciencequest.model.dto.extensions + +import fr.iut.sciencequest.model.dto.reponse.ReponseDTO +import fr.iut.sciencequest.model.metier.reponse.Reponse +import fr.iut.sciencequest.model.metier.reponse.ReponseSimple + +fun ReponseDTO.ToModel(): Reponse { + return Reponse( + this.id, + this.reponse, + this.question.ToModel(), + this.scientifique.ToModel() + ) +} + +fun List.ToModel(): List { + val liste = ArrayList() + for (reponse in this) { + liste.add(reponse.ToModel()) + } + return liste +} + +fun Reponse.ToSimpleReponse(): ReponseSimple { + return ReponseSimple( + this.id, + this.reponse + ) +} + +fun List.ToSimpleReponses(): List { + val liste = ArrayList() + for (reponse in this) { + liste.add(reponse.ToSimpleReponse()) + } + return liste +} \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/SimpleReponseExtension.kt b/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/SimpleReponseExtension.kt new file mode 100644 index 0000000..bae8326 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/dto/extensions/SimpleReponseExtension.kt @@ -0,0 +1,19 @@ +package fr.iut.sciencequest.model.dto.extensions + +import fr.iut.sciencequest.model.dto.reponse.ReponseSimpleDTO +import fr.iut.sciencequest.model.metier.reponse.ReponseSimple + +fun ReponseSimpleDTO.ToModel(): ReponseSimple { + return ReponseSimple( + this.id, + this.reponse + ) +} + +fun List.ToModel(): List { + val liste = ArrayList() + for (reponse in this) { + liste.add(reponse.ToModel()) + } + return liste +} \ No newline at end of file From 17eabbd9a57367af2a24450c1257294ecece2849 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:08:29 +0200 Subject: [PATCH 07/18] [ADD] Repositories pour question --- .../question/IQuestionRepository.kt | 11 +++++ .../question/QuestionAPIRepository.kt | 47 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/IQuestionRepository.kt create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/IQuestionRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/IQuestionRepository.kt new file mode 100644 index 0000000..4518060 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/IQuestionRepository.kt @@ -0,0 +1,11 @@ +package fr.iut.sciencequest.model.repositories.question + +import fr.iut.sciencequest.model.metier.question.Question +import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow + +interface IQuestionRepository { + val questions: StateFlow> + suspend fun fetchQuestions(index: Int) +} \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt new file mode 100644 index 0000000..609999d --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt @@ -0,0 +1,47 @@ +package fr.iut.sciencequest.model.repositories.question + +import android.util.Log +import fr.iut.sciencequest.model.buisness.Question.QuestionRequestService +import fr.iut.sciencequest.model.buisness.createRequestService +import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.metier.question.Question +import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.update +import retrofit2.create + +class QuestionAPIRepository : IQuestionRepository { + + private val _questions = MutableStateFlow>(emptyList()) + override val questions: StateFlow> + get() = _questions.asStateFlow() + + override suspend fun fetchQuestions(index: Int) { + //1. appel à l'api QuestionRequestService + //2. fill _questions with QuestionRequestService response +// _questions.update { +// +// } + val serviceClient = createRequestService().create() + try { + _questions.value = serviceClient.getQuestions(index).questions.ToModel() + } catch (e: Exception) { + Log.e("Requete API Question", e.message.toString()) + } + } + + suspend fun fetchQuestions2(index: Int): Flow> = flow { + val serviceClient = createRequestService().create() + try { + val response = serviceClient.getQuestions(index) + emit(response.questions.ToModel()) + } catch (e: Exception) { + Log.e("Requete API Question", e.message.toString()) + } + } + +} \ No newline at end of file From 66decf048621d748f1f3b10ccba2a8406cb03d42 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:11:20 +0200 Subject: [PATCH 08/18] [FIX] KahootUIState utilise QuestionWithSimpleReponse --- .../fr/iut/sciencequest/ViewModels/UiStates/KahootUIState.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/KahootUIState.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/KahootUIState.kt index 3048aa3..caec3d4 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/KahootUIState.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/KahootUIState.kt @@ -1,11 +1,13 @@ package fr.iut.sciencequest.ViewModels.UiStates +import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.dto.question.QuestionWithSimpleResponseDTO import fr.iut.sciencequest.model.dto.reponse.ReponseSimpleDTO +import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse import fr.iut.sciencequest.stub.StubQuestionWithReponses data class KahootUIState ( - val question: QuestionWithSimpleResponseDTO = StubQuestionWithReponses, + val question: QuestionWithSimpleReponse = StubQuestionWithReponses.ToModel(), val reponseChoisie: Boolean = false, // NOTE : Supposé en millisecondes val duréePartie: Long = 10_000, From 6a09993f230c7023cb8d945b3854d223a3227c6b Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:13:05 +0200 Subject: [PATCH 09/18] [ADD] Reponse Simple --- .../java/fr/iut/sciencequest/model/metier/reponse/Reponse.kt | 5 ++++- .../iut/sciencequest/model/metier/reponse/ReponseSimple.kt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/Reponse.kt b/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/Reponse.kt index aaacc6d..40f5f28 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/Reponse.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/Reponse.kt @@ -1,4 +1,7 @@ -package fr.iut.sciencequest.model.metier +package fr.iut.sciencequest.model.metier.reponse + +import fr.iut.sciencequest.model.metier.question.Question +import fr.iut.sciencequest.model.metier.Scientifique class Reponse ( val id: Int, diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/ReponseSimple.kt b/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/ReponseSimple.kt index 44f8dd7..2bcddb3 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/ReponseSimple.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/metier/reponse/ReponseSimple.kt @@ -1,6 +1,6 @@ package fr.iut.sciencequest.model.metier.reponse -class SimpleResponse { +class ReponseSimple { val id: Int val reponse: String From 47a3fdecbdbd004237cd0835187ae11179a292e6 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:14:00 +0200 Subject: [PATCH 10/18] [FIX] NavHost n'instancie plus le KahootViewModel --- .../main/java/fr/iut/sciencequest/navigation/NavHost.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt index 6e266a8..3d1a68f 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -21,7 +22,7 @@ import fr.iut.sciencequest.view.scientifiques.scientifiqueListeScreen @Composable -fun NavHost(kahotVM: KahootViewModel = viewModel()) { +fun NavHost() { val navController = rememberNavController() NavHost( modifier = Modifier.fillMaxSize(), @@ -40,7 +41,6 @@ fun NavHost(kahotVM: KahootViewModel = viewModel()) { navController.navigate("pendu") }, goToKahoot = { - kahotVM.lancerPartie() navController.navigate("kahoot") } ) @@ -85,8 +85,7 @@ fun NavHost(kahotVM: KahootViewModel = viewModel()) { }, goToHome = { navController.navigate("home") - }, - viewModel = kahotVM) + }) } composable(route = "listeScientifiques") { From 318c14bec3ee9ee88ea615d52a6b49fa53b625ee Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:14:40 +0200 Subject: [PATCH 11/18] =?UTF-8?q?[FIX]=20Factory=20et=20utilisent=20un=20r?= =?UTF-8?q?epo=20inject=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/KahootViewModel.kt | 52 +++++++++++++------ .../sciencequest/ViewModels/PenduViewModel.kt | 24 +++++++-- .../ViewModels/ScientifiquesDecouvertsVM.kt | 8 +-- 3 files changed, 57 insertions(+), 27 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/KahootViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/KahootViewModel.kt index eea6a93..2c3d0e8 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/KahootViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/KahootViewModel.kt @@ -4,33 +4,40 @@ import android.os.Handler import android.os.Looper import android.util.Log import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import fr.iut.sciencequest.ViewModels.UiStates.KahootUIState -import fr.iut.sciencequest.model.buisness.Question.fetchQuestions -import fr.iut.sciencequest.stub.StubQuestionWithReponses2 +import fr.iut.sciencequest.model.repositories.question.IQuestionRepository +import fr.iut.sciencequest.model.repositories.question.QuestionAPIRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch -class KahootViewModel: ViewModel() { +class KahootViewModel( + val questionRepo: IQuestionRepository +): ViewModel() { var uiState = MutableStateFlow(KahootUIState()) private val handler = Handler(Looper.getMainLooper()) fun lancerPartie() { viewModelScope.launch { - fetchQuestions(2).collect() { - for (question in it.questions) { - handler.postDelayed( - { - Log.d("KahootViewModel","J'actualise les questions") - uiState.value = KahootUIState(question, - duréePartie = uiState.value.duréePartie, - nbPoints = uiState.value.nbPoints, - reponseChoisie = false) - }, - uiState.value.duréePartie - ) - } + questionRepo.fetchQuestions(2) + Log.d("KahootViewModel","J'ai trouvé ${questionRepo.questions.value.size} questions") + var count = 1 + for (question in questionRepo.questions.value) { + handler.postDelayed( + { + Log.d("KahootViewModel", "J'actualise les questions") + uiState.value = KahootUIState( + question, + duréePartie = uiState.value.duréePartie, + nbPoints = uiState.value.nbPoints, + reponseChoisie = false + ) + }, + uiState.value.duréePartie * count + ) + count++ } } } @@ -49,4 +56,17 @@ class KahootViewModel: ViewModel() { reponseChoisie = true) Log.d("KahootViewModel","Le joueur à ${uiState.value.nbPoints}") } + companion object { + + val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { + @Suppress("UNCHECKED_CAST") + override fun create( + modelClass: Class + ): T { + return KahootViewModel( + QuestionAPIRepository() + ) as T + } + } + } } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt index a13413b..5e3ae76 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt @@ -2,21 +2,24 @@ package fr.iut.sciencequest.ViewModels import android.util.Log import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import fr.iut.sciencequest.ViewModels.UiStates.PenduUIState -import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById -import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.repositories.scientifique.IScientifiqueRepository +import fr.iut.sciencequest.model.repositories.scientifique.ScientifiqueAPIRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch -class PenduViewModel : ViewModel() { +class PenduViewModel( + val scientifiqueRepo: IScientifiqueRepository +) : ViewModel() { var uiState = MutableStateFlow(PenduUIState()) fun InitPartie() { Log.d("PenduViewModel","Un utilisateur initialise une partie") viewModelScope.launch { - fetchScientifiqueById(1).collect { + scientifiqueRepo.fetchScientifiqueById(1).collect { val nomComplet = it.prenom + " " + it.nom Log.d("ViewModelPendu",nomComplet) var motATrou = "" @@ -82,4 +85,17 @@ class PenduViewModel : ViewModel() { ) } } + companion object { + + val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { + @Suppress("UNCHECKED_CAST") + override fun create( + modelClass: Class + ): T { + return PenduViewModel( + ScientifiqueAPIRepository() + ) as T + } + } + } } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt index df79854..f40e5a8 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt @@ -16,13 +16,7 @@ class ScientifiquesDecouvertsVM( ) : ViewModel() { private val _listeScientifique: MutableStateFlow = MutableStateFlow(ScientifiqueDecouvertsUIState()) val listeScientifique = _listeScientifique.asStateFlow() - // fun getScientifiqueById(id: Int) { - // Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id") - // var scientifique: Scientifique - // viewModelScope.launch { -// - // } - // } + fun getScientifiques(page: Int) { Log.d("ViewModelScientifique","Recup la liste de scientifiques") viewModelScope.launch { From b22cee99e94d3e7b89194bb18f05576788a84414 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:15:12 +0200 Subject: [PATCH 12/18] [FIX] Vues utilisent correctement ViewModels avec repo --- .../java/fr/iut/sciencequest/view/games/Kahoot.kt | 15 +++++++++++---- .../java/fr/iut/sciencequest/view/games/Pendu.kt | 2 +- .../view/scientifiques/ScientifiqueListeScreen.kt | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt index 8632270..faf4d9f 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -21,17 +22,23 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import fr.iut.sciencequest.R import fr.iut.sciencequest.ViewModels.KahootViewModel +import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.dto.question.QuestionWithSimpleResponseDTO import fr.iut.sciencequest.model.dto.reponse.ReponseSimpleDTO +import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse +import fr.iut.sciencequest.model.metier.reponse.ReponseSimple import fr.iut.sciencequest.stub.StubQuestionWithReponses import fr.iut.sciencequest.view.TopBar import java.util.Timer @Composable -fun KahootScreen(viewModel: KahootViewModel = viewModel(), +fun KahootScreen(viewModel: KahootViewModel = viewModel(factory = KahootViewModel.Factory), goToAccount: () -> Unit, goToHome: () -> Unit) { val state = viewModel.uiState.collectAsState() + LaunchedEffect(key1 = Unit) { + viewModel.lancerPartie() + } Column(modifier = Modifier.fillMaxWidth()) { TopBar(goToAccount, goToHome, stringResource(id = R.string.kahoot)) KahootPlayer(state.value.question) { @@ -51,12 +58,12 @@ fun KahootScreenPreview(){ @Composable fun KahootPlayerPreview(){ val i = 0 - KahootPlayer(question = StubQuestionWithReponses) {} + KahootPlayer(question = StubQuestionWithReponses.ToModel()) {} } @Composable -fun KahootPlayer(question: QuestionWithSimpleResponseDTO, +fun KahootPlayer(question: QuestionWithSimpleReponse, sendReponse: (Long) -> Unit){ val context = LocalContext.current; val currTime = System.currentTimeMillis() @@ -71,7 +78,7 @@ fun KahootPlayer(question: QuestionWithSimpleResponseDTO, @Composable -fun KahootReponses(reponses : List, action: (ReponseSimpleDTO)->Unit) { +fun KahootReponses(reponses : List, action: (ReponseSimple)->Unit) { LazyVerticalGrid(columns = GridCells.Fixed(2), contentPadding = PaddingValues(12.dp), verticalArrangement = Arrangement.spacedBy(10.dp), diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt index 0ead09d..975aad9 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt @@ -23,7 +23,7 @@ import fr.iut.sciencequest.ViewModels.PenduViewModel import fr.iut.sciencequest.view.TopBar @Composable -fun PenduScreen(viewModel: PenduViewModel = viewModel(), +fun PenduScreen(viewModel: PenduViewModel = viewModel(factory = PenduViewModel.Factory), goToAccount: () -> Unit, goToHome: () -> Unit) { val state = viewModel.uiState.collectAsState() diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt index 9cec033..089fe0a 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt @@ -17,7 +17,7 @@ import fr.iut.sciencequest.stub.getScientifiqueListeStub import fr.iut.sciencequest.view.TopBar @Composable -fun scientifiqueListeScreen(viewModel: ScientifiquesDecouvertsVM = viewModel(), +fun scientifiqueListeScreen(viewModel: ScientifiquesDecouvertsVM = viewModel(factory = ScientifiquesDecouvertsVM.Factory), goToAccount: () -> Unit, goToHome: () -> Unit) { val liste by viewModel.listeScientifique.collectAsState() From 6d038ffe30c2add698c41a6193696667a59c82f3 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:23:57 +0200 Subject: [PATCH 13/18] [FIX] Nom package pour respecter conventions de nommage --- .../app/src/main/java/fr/iut/sciencequest/MainActivity.kt | 5 ----- .../main/java/fr/iut/sciencequest/navigation/NavHost.kt | 7 ------- .../src/main/java/fr/iut/sciencequest/view/HomeScreen.kt | 2 -- .../app/src/main/java/fr/iut/sciencequest/view/Login.kt | 2 +- .../src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt | 5 +---- .../src/main/java/fr/iut/sciencequest/view/games/Pendu.kt | 2 +- .../view/scientifiques/ScientifiqueListeScreen.kt | 7 +------ .../{ViewModels => viewModels}/KahootViewModel.kt | 4 ++-- .../{ViewModels => viewModels}/LoginViewModel.kt | 4 ++-- .../{ViewModels => viewModels}/PenduViewModel.kt | 5 ++--- .../ScientifiquesDecouvertsVM.kt | 4 ++-- .../UiStates => viewModels/uiStates}/KahootUIState.kt | 4 +--- .../UiStates => viewModels/uiStates}/LoginUIState.kt | 2 +- .../UiStates => viewModels/uiStates}/PenduUIState.kt | 2 +- .../uiStates}/ScientifiqueDecouvertsUIState.kt | 2 +- 15 files changed, 16 insertions(+), 41 deletions(-) rename android/app/src/main/java/fr/iut/sciencequest/{ViewModels => viewModels}/KahootViewModel.kt (96%) rename android/app/src/main/java/fr/iut/sciencequest/{ViewModels => viewModels}/LoginViewModel.kt (79%) rename android/app/src/main/java/fr/iut/sciencequest/{ViewModels => viewModels}/PenduViewModel.kt (96%) rename android/app/src/main/java/fr/iut/sciencequest/{ViewModels => viewModels}/ScientifiquesDecouvertsVM.kt (93%) rename android/app/src/main/java/fr/iut/sciencequest/{ViewModels/UiStates => viewModels/uiStates}/KahootUIState.kt (70%) rename android/app/src/main/java/fr/iut/sciencequest/{ViewModels/UiStates => viewModels/uiStates}/LoginUIState.kt (66%) rename android/app/src/main/java/fr/iut/sciencequest/{ViewModels/UiStates => viewModels/uiStates}/PenduUIState.kt (83%) rename android/app/src/main/java/fr/iut/sciencequest/{ViewModels/UiStates => viewModels/uiStates}/ScientifiqueDecouvertsUIState.kt (87%) diff --git a/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt b/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt index 3ea7785..bd86650 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt @@ -1,18 +1,13 @@ package fr.iut.sciencequest import android.os.Bundle -import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.activity.viewModels import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.ui.Modifier -import fr.iut.sciencequest.ViewModels.ScientifiquesDecouvertsVM -import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.navigation.NavHost -import fr.iut.sciencequest.stub.StubScientifique1 import fr.iut.sciencequest.ui.theme.ScienceQuestTheme class MainActivity : ComponentActivity() { diff --git a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt index 3d1a68f..8307321 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt @@ -1,18 +1,11 @@ package fr.iut.sciencequest.navigation -import android.content.Context import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import fr.iut.sciencequest.ViewModels.KahootViewModel -import fr.iut.sciencequest.ViewModels.PenduViewModel -import fr.iut.sciencequest.ViewModels.ScientifiquesDecouvertsVM -import fr.iut.sciencequest.stub.StubQuestionWithReponses import fr.iut.sciencequest.view.AccountScreen import fr.iut.sciencequest.view.HomeScreen import fr.iut.sciencequest.view.LoginScreen diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/HomeScreen.kt b/android/app/src/main/java/fr/iut/sciencequest/view/HomeScreen.kt index b4555d0..10d6995 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/HomeScreen.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/HomeScreen.kt @@ -14,8 +14,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.lifecycle.viewmodel.compose.viewModel -import fr.iut.sciencequest.ViewModels.KahootViewModel @Composable fun HomeScreen(goToHome: () -> Unit, diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/Login.kt b/android/app/src/main/java/fr/iut/sciencequest/view/Login.kt index 82cd26f..9b8ecd8 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/Login.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/Login.kt @@ -26,7 +26,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import fr.iut.sciencequest.R -import fr.iut.sciencequest.ViewModels.LoginViewModel +import fr.iut.sciencequest.viewModels.LoginViewModel @Composable fun LoginScreen(viewModel: LoginViewModel = viewModel(), diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt index faf4d9f..7158e3c 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt @@ -21,15 +21,12 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import fr.iut.sciencequest.R -import fr.iut.sciencequest.ViewModels.KahootViewModel +import fr.iut.sciencequest.viewModels.KahootViewModel import fr.iut.sciencequest.model.dto.extensions.ToModel -import fr.iut.sciencequest.model.dto.question.QuestionWithSimpleResponseDTO -import fr.iut.sciencequest.model.dto.reponse.ReponseSimpleDTO import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse import fr.iut.sciencequest.model.metier.reponse.ReponseSimple import fr.iut.sciencequest.stub.StubQuestionWithReponses import fr.iut.sciencequest.view.TopBar -import java.util.Timer @Composable fun KahootScreen(viewModel: KahootViewModel = viewModel(factory = KahootViewModel.Factory), diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt index 975aad9..701e659 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import fr.iut.sciencequest.R -import fr.iut.sciencequest.ViewModels.PenduViewModel +import fr.iut.sciencequest.viewModels.PenduViewModel import fr.iut.sciencequest.view.TopBar @Composable diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt index 089fe0a..00928fb 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt @@ -1,19 +1,14 @@ package fr.iut.sciencequest.view.scientifiques -import android.util.Log import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview import androidx.lifecycle.viewmodel.compose.viewModel import fr.iut.sciencequest.R -import fr.iut.sciencequest.ViewModels.ScientifiquesDecouvertsVM -import fr.iut.sciencequest.model.dto.extensions.ToModel -import fr.iut.sciencequest.model.metier.Scientifique -import fr.iut.sciencequest.stub.getScientifiqueListeStub +import fr.iut.sciencequest.viewModels.ScientifiquesDecouvertsVM import fr.iut.sciencequest.view.TopBar @Composable diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/KahootViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt similarity index 96% rename from android/app/src/main/java/fr/iut/sciencequest/ViewModels/KahootViewModel.kt rename to android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt index 2c3d0e8..28a00e5 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/KahootViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt @@ -1,4 +1,4 @@ -package fr.iut.sciencequest.ViewModels +package fr.iut.sciencequest.viewModels import android.os.Handler import android.os.Looper @@ -6,7 +6,7 @@ import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import fr.iut.sciencequest.ViewModels.UiStates.KahootUIState +import fr.iut.sciencequest.viewModels.uiStates.KahootUIState import fr.iut.sciencequest.model.repositories.question.IQuestionRepository import fr.iut.sciencequest.model.repositories.question.QuestionAPIRepository import kotlinx.coroutines.flow.MutableStateFlow diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/LoginViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/LoginViewModel.kt similarity index 79% rename from android/app/src/main/java/fr/iut/sciencequest/ViewModels/LoginViewModel.kt rename to android/app/src/main/java/fr/iut/sciencequest/viewModels/LoginViewModel.kt index 2f99c5a..1b4d704 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/LoginViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/LoginViewModel.kt @@ -1,7 +1,7 @@ -package fr.iut.sciencequest.ViewModels +package fr.iut.sciencequest.viewModels import androidx.lifecycle.ViewModel -import fr.iut.sciencequest.ViewModels.UiStates.LoginUIState +import fr.iut.sciencequest.viewModels.uiStates.LoginUIState import kotlinx.coroutines.flow.MutableStateFlow class LoginViewModel: ViewModel() { diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt similarity index 96% rename from android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt rename to android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt index 5e3ae76..079e6b8 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt @@ -1,11 +1,10 @@ -package fr.iut.sciencequest.ViewModels +package fr.iut.sciencequest.viewModels import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import fr.iut.sciencequest.ViewModels.UiStates.PenduUIState -import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.viewModels.uiStates.PenduUIState import fr.iut.sciencequest.model.repositories.scientifique.IScientifiqueRepository import fr.iut.sciencequest.model.repositories.scientifique.ScientifiqueAPIRepository import kotlinx.coroutines.flow.MutableStateFlow diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt similarity index 93% rename from android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt rename to android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt index f40e5a8..2a45f3c 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/ScientifiquesDecouvertsVM.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt @@ -1,10 +1,10 @@ -package fr.iut.sciencequest.ViewModels +package fr.iut.sciencequest.viewModels import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import fr.iut.sciencequest.ViewModels.UiStates.ScientifiqueDecouvertsUIState +import fr.iut.sciencequest.viewModels.uiStates.ScientifiqueDecouvertsUIState import fr.iut.sciencequest.model.repositories.scientifique.IScientifiqueRepository import fr.iut.sciencequest.model.repositories.scientifique.ScientifiqueAPIRepository import kotlinx.coroutines.flow.MutableStateFlow diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/KahootUIState.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/KahootUIState.kt similarity index 70% rename from android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/KahootUIState.kt rename to android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/KahootUIState.kt index caec3d4..738a48b 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/KahootUIState.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/KahootUIState.kt @@ -1,8 +1,6 @@ -package fr.iut.sciencequest.ViewModels.UiStates +package fr.iut.sciencequest.viewModels.uiStates import fr.iut.sciencequest.model.dto.extensions.ToModel -import fr.iut.sciencequest.model.dto.question.QuestionWithSimpleResponseDTO -import fr.iut.sciencequest.model.dto.reponse.ReponseSimpleDTO import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse import fr.iut.sciencequest.stub.StubQuestionWithReponses diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/LoginUIState.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/LoginUIState.kt similarity index 66% rename from android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/LoginUIState.kt rename to android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/LoginUIState.kt index bf2161f..febb072 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/LoginUIState.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/LoginUIState.kt @@ -1,4 +1,4 @@ -package fr.iut.sciencequest.ViewModels.UiStates +package fr.iut.sciencequest.viewModels.uiStates data class LoginUIState ( val pseudo: String = "Pseudo", diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/PenduUIState.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/PenduUIState.kt similarity index 83% rename from android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/PenduUIState.kt rename to android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/PenduUIState.kt index 369fbed..2ec2219 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/PenduUIState.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/PenduUIState.kt @@ -1,4 +1,4 @@ -package fr.iut.sciencequest.ViewModels.UiStates +package fr.iut.sciencequest.viewModels.uiStates data class PenduUIState( val isWon: Boolean = false, diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/ScientifiqueDecouvertsUIState.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/ScientifiqueDecouvertsUIState.kt similarity index 87% rename from android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/ScientifiqueDecouvertsUIState.kt rename to android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/ScientifiqueDecouvertsUIState.kt index 68eec9e..11b066a 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/ScientifiqueDecouvertsUIState.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/ScientifiqueDecouvertsUIState.kt @@ -1,4 +1,4 @@ -package fr.iut.sciencequest.ViewModels.UiStates +package fr.iut.sciencequest.viewModels.uiStates import fr.iut.sciencequest.model.metier.Scientifique From 3711a0934fb7bc802a818d866b443e18cb4a5bba Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:27:29 +0200 Subject: [PATCH 14/18] [FIX] KahootUIState --- .../main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt | 2 +- .../fr/iut/sciencequest/viewModels/uiStates/KahootUIState.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt index 28a00e5..9d867ea 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt @@ -6,9 +6,9 @@ import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import fr.iut.sciencequest.viewModels.uiStates.KahootUIState import fr.iut.sciencequest.model.repositories.question.IQuestionRepository import fr.iut.sciencequest.model.repositories.question.QuestionAPIRepository +import fr.iut.sciencequest.viewModels.uixStates.KahootUIState import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/KahootUIState.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/KahootUIState.kt index 738a48b..13054d9 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/KahootUIState.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/uiStates/KahootUIState.kt @@ -1,4 +1,4 @@ -package fr.iut.sciencequest.viewModels.uiStates +package fr.iut.sciencequest.viewModels.uixStates import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse From 981afd5a3a6da3f6c3a35d34cea2b2d157747ae1 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 15:29:20 +0200 Subject: [PATCH 15/18] [DEL] Vieux fetchQuestion --- .../repositories/question/QuestionAPIRepository.kt | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt index 609999d..2009019 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt @@ -33,15 +33,4 @@ class QuestionAPIRepository : IQuestionRepository { Log.e("Requete API Question", e.message.toString()) } } - - suspend fun fetchQuestions2(index: Int): Flow> = flow { - val serviceClient = createRequestService().create() - try { - val response = serviceClient.getQuestions(index) - emit(response.questions.ToModel()) - } catch (e: Exception) { - Log.e("Requete API Question", e.message.toString()) - } - } - } \ No newline at end of file From 7362763f9ba499943728c4517c9c49f7f5eb711d Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 16:09:19 +0200 Subject: [PATCH 16/18] [FIX] Meilleur repository pour Scientifique --- .../question/QuestionAPIRepository.kt | 5 ---- .../scientifique/IScientifiqueRepository.kt | 9 ++++-- .../scientifique/ScientifiqueAPIRepository.kt | 28 +++++++++++++------ .../sciencequest/viewModels/PenduViewModel.kt | 6 ++-- .../viewModels/ScientifiquesDecouvertsVM.kt | 5 ++-- 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt index 2009019..45b69c5 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/question/QuestionAPIRepository.kt @@ -21,11 +21,6 @@ class QuestionAPIRepository : IQuestionRepository { get() = _questions.asStateFlow() override suspend fun fetchQuestions(index: Int) { - //1. appel à l'api QuestionRequestService - //2. fill _questions with QuestionRequestService response -// _questions.update { -// -// } val serviceClient = createRequestService().create() try { _questions.value = serviceClient.getQuestions(index).questions.ToModel() diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/IScientifiqueRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/IScientifiqueRepository.kt index f99b056..b99473f 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/IScientifiqueRepository.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/IScientifiqueRepository.kt @@ -1,9 +1,14 @@ package fr.iut.sciencequest.model.repositories.scientifique import fr.iut.sciencequest.model.metier.Scientifique +import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow interface IScientifiqueRepository { - suspend fun fetchScientifiques(index: Int): Flow> - suspend fun fetchScientifiqueById(id: Int): Flow + + val scientifique: StateFlow + val scientifiques: StateFlow> + suspend fun fetchScientifiques(index: Int) + suspend fun fetchScientifiqueById(id: Int) } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt index 746e1af..85a5b2a 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt @@ -1,32 +1,44 @@ package fr.iut.sciencequest.model.repositories.scientifique import android.util.Log +import fr.iut.sciencequest.model.buisness.Question.QuestionRequestService import fr.iut.sciencequest.model.buisness.Scientifique.ScientifiqueRequestService import fr.iut.sciencequest.model.buisness.createRequestService import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.metier.Scientifique +import fr.iut.sciencequest.stub.StubScientifique1 import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.flow import retrofit2.create class ScientifiqueAPIRepository: IScientifiqueRepository { - suspend override fun fetchScientifiqueById(id: Int): Flow = flow { + + private val _scientifique = MutableStateFlow(StubScientifique1.ToModel()) + override val scientifique: StateFlow + get() = _scientifique.asStateFlow() + + private val _scientifiques = MutableStateFlow>(emptyList()) + override val scientifiques: StateFlow> + get() = _scientifiques.asStateFlow() + + override suspend fun fetchScientifiqueById(id: Int) { val serviceClient = createRequestService().create() try { - val response = serviceClient.getScientifique(id) - emit(response.ToModel()) + _scientifique.value = serviceClient.getScientifique(id).ToModel() } catch (e: Exception) { - Log.e("Requete API",e.message.toString()) + Log.e("Requete API Scientifiqu", e.message.toString()) } } - suspend override fun fetchScientifiques(index: Int): Flow> = flow { + override suspend fun fetchScientifiques(index: Int) { val serviceClient = createRequestService().create() try { - val response = serviceClient.getScientifiques(index) - emit(response.scientifiques.ToModel()) + _scientifiques.value = serviceClient.getScientifiques(index).scientifiques.ToModel() } catch (e: Exception) { - Log.e("Requete API",e.message.toString()) + Log.e("Requete API Scientifiqu", e.message.toString()) } } } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt index 079e6b8..9b859c8 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt @@ -18,8 +18,9 @@ class PenduViewModel( fun InitPartie() { Log.d("PenduViewModel","Un utilisateur initialise une partie") viewModelScope.launch { - scientifiqueRepo.fetchScientifiqueById(1).collect { - val nomComplet = it.prenom + " " + it.nom + scientifiqueRepo.fetchScientifiqueById(1) + val scientifique = scientifiqueRepo.scientifique.value + val nomComplet = scientifique.prenom + " " + scientifique.nom Log.d("ViewModelPendu",nomComplet) var motATrou = "" for (chr in nomComplet) { @@ -36,7 +37,6 @@ class PenduViewModel( ) } } - } // mot : mot à trouver // motAct : état actuel du mot trouvé par l'utilisateur diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt index 2a45f3c..ef1648f 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt @@ -20,9 +20,8 @@ class ScientifiquesDecouvertsVM( fun getScientifiques(page: Int) { Log.d("ViewModelScientifique","Recup la liste de scientifiques") viewModelScope.launch { - repository.fetchScientifiques(page).collect { - _listeScientifique.value = ScientifiqueDecouvertsUIState(it.toMutableList()) - } + repository.fetchScientifiques(page) + _listeScientifique.value = ScientifiqueDecouvertsUIState(repository.scientifiques.value.toMutableList()) } } companion object { From 9462b539ea1668aee7cf2aa83e9f40083b61c7f8 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 16:17:47 +0200 Subject: [PATCH 17/18] [FIX] Refactor factory --- .../app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt | 2 +- .../app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt | 2 +- .../sciencequest/view/scientifiques/ScientifiqueListeScreen.kt | 2 +- .../main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt | 2 +- .../main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt | 2 +- .../fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt index 7158e3c..22a2ba3 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt @@ -29,7 +29,7 @@ import fr.iut.sciencequest.stub.StubQuestionWithReponses import fr.iut.sciencequest.view.TopBar @Composable -fun KahootScreen(viewModel: KahootViewModel = viewModel(factory = KahootViewModel.Factory), +fun KahootScreen(viewModel: KahootViewModel = viewModel(factory = KahootViewModel.ApiFactory), goToAccount: () -> Unit, goToHome: () -> Unit) { val state = viewModel.uiState.collectAsState() diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt index 701e659..eb21bf8 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt @@ -23,7 +23,7 @@ import fr.iut.sciencequest.viewModels.PenduViewModel import fr.iut.sciencequest.view.TopBar @Composable -fun PenduScreen(viewModel: PenduViewModel = viewModel(factory = PenduViewModel.Factory), +fun PenduScreen(viewModel: PenduViewModel = viewModel(factory = PenduViewModel.ApiFactory), goToAccount: () -> Unit, goToHome: () -> Unit) { val state = viewModel.uiState.collectAsState() diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt index 00928fb..3f8ceb4 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/scientifiques/ScientifiqueListeScreen.kt @@ -12,7 +12,7 @@ import fr.iut.sciencequest.viewModels.ScientifiquesDecouvertsVM import fr.iut.sciencequest.view.TopBar @Composable -fun scientifiqueListeScreen(viewModel: ScientifiquesDecouvertsVM = viewModel(factory = ScientifiquesDecouvertsVM.Factory), +fun scientifiqueListeScreen(viewModel: ScientifiquesDecouvertsVM = viewModel(factory = ScientifiquesDecouvertsVM.ApiFactory), goToAccount: () -> Unit, goToHome: () -> Unit) { val liste by viewModel.listeScientifique.collectAsState() diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt index 9d867ea..0e534f0 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt @@ -58,7 +58,7 @@ class KahootViewModel( } companion object { - val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { + val ApiFactory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create( modelClass: Class diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt index 9b859c8..9316e4f 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/PenduViewModel.kt @@ -86,7 +86,7 @@ class PenduViewModel( } companion object { - val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { + val ApiFactory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create( modelClass: Class diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt index ef1648f..1521430 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/ScientifiquesDecouvertsVM.kt @@ -26,7 +26,7 @@ class ScientifiquesDecouvertsVM( } companion object { - val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { + val ApiFactory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create( modelClass: Class From a69a20684452570a88b85fa4a6af5e0046099071 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Tue, 2 Apr 2024 17:24:11 +0200 Subject: [PATCH 18/18] [ADD] Scientifique Stub Repo --- .../scientifique/ScientifiqueAPIRepository.kt | 2 +- .../scientifique/ScientifiqueStubRepostory.kt | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueStubRepostory.kt diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt index 85a5b2a..52e9a65 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueAPIRepository.kt @@ -16,7 +16,7 @@ import retrofit2.create class ScientifiqueAPIRepository: IScientifiqueRepository { - private val _scientifique = MutableStateFlow(StubScientifique1.ToModel()) + private val _scientifique = MutableStateFlow(StubScientifique1.ToModel()) override val scientifique: StateFlow get() = _scientifique.asStateFlow() diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueStubRepostory.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueStubRepostory.kt new file mode 100644 index 0000000..65226a5 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/scientifique/ScientifiqueStubRepostory.kt @@ -0,0 +1,39 @@ +package fr.iut.sciencequest.model.repositories.scientifique + +import android.content.res.Resources.NotFoundException +import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.metier.Scientifique +import fr.iut.sciencequest.stub.StubScientifique1 +import fr.iut.sciencequest.stub.StubScientifique2 +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +class ScientifiqueStubRepostory : IScientifiqueRepository { + + private var listeStub : MutableList = mutableListOf( + StubScientifique1.ToModel(), + StubScientifique2.ToModel() + ) + private val _scientifique = MutableStateFlow(StubScientifique1.ToModel()) + override val scientifique: StateFlow + get() = _scientifique.asStateFlow() + private val _scientifiques = MutableStateFlow>(emptyList()) + override val scientifiques: StateFlow> + get() = _scientifiques.asStateFlow() + + override suspend fun fetchScientifiques(index: Int) { + _scientifiques.value = listeStub + } + + override suspend fun fetchScientifiqueById(id: Int) { + val retrieved = listeStub.find { + it.id == id + } ?: throw NotFoundException("Scientifique introuvable dans le stub") + _scientifique.value = retrieved + } + + fun setScientifiqueStubList(scientifiques: MutableList) { + listeStub = scientifiques + } +} \ No newline at end of file