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 dde03bd..b9642b9 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt @@ -19,8 +19,6 @@ import fr.iut.sciencequest.ui.theme.ScienceQuestTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val vm = viewModels().value - vm.addScientifiques(StubScientifique1.ToModel()) setContent { ScienceQuestTheme { // A surface container using the 'background' color from the theme 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 826dd20..0f7dd9d 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 @@ -3,22 +3,32 @@ package fr.iut.sciencequest.ViewModels import android.util.Log import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateListOf +import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +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 kotlinx.coroutines.flow.collect +import kotlinx.coroutines.launch class ScientifiquesDecouvertsVM : ViewModel() { - private var listeScientifique: MutableList = mutableStateListOf() + var listeScientifique: MutableList = mutableStateListOf() - fun getScientifiques(): MutableList { - Log.d("ViewModel","""je get un scientifique, taille act : ${listeScientifique.size}""") - return listeScientifique - } - - fun addScientifiques(scientifique: Scientifique) { - if (listeScientifique.add(scientifique)) { - Log.d("ViewModel","""j'ajoute un scientifique, taille act : ${listeScientifique.size}""") - } else { - Log.d("ViewModel","Erreur lors d'un ajout") + // 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 { + fetchScientifiques(page).collect() { + listeScientifique = it.scientifiques.ToModel().toMutableList(); + } } } } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiqueRequestService.kt b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiqueRequestService.kt index 02818fd..b3a5342 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiqueRequestService.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiqueRequestService.kt @@ -14,8 +14,8 @@ import retrofit2.http.Query interface ScientifiqueRequestService { @GET("scientifiques?page") - fun getScientifiques(@Query("page") index: Int): Call + suspend fun getScientifiques(@Query("page") index: Int): ScientifiqueListDTO @GET("scientifiques/{id}") - fun getScientifique(@Path("id") id: Int): Call + suspend fun getScientifique(@Path("id") id: Int): ScientifiqueDTO } \ 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 index e3bf862..519a8ed 100644 --- 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 @@ -4,67 +4,29 @@ 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 -fun fetchScientifiqueById(id: Int) { +suspend fun fetchScientifiqueById(id: Int) = flow { val serviceClient = createRequestService().create() - Log.d("Requete API","Fetch un scientifique") - serviceClient.getScientifique(id).enqueue( - object: Callback { - override fun onResponse( - call: Call, - response: Response - ) { - // NOTE : il faudrait probablement utiliser une autre exception - // exception personnalisée ? - val data = response.body() ?: - throw IllegalArgumentException("ERREUR : l'api a donné une réponse vide") - // Devrait appeler le ModelView, la méthode onResponse ne renvoit rien - // Pour le moment des print pour vérifier que la requêtre fonctionne - // sans avoir besoin des vues. - Log.d("Requete API",data.id.toString()) - Log.d("Requete API", data.nom) - } - - override fun onFailure(call: Call, t: Throwable) { - Log.e("Requete API","Erreur lors d'une requete api") - throw t - } - } - ) + try { + val response = serviceClient.getScientifique(id) + emit(response) + } catch (e: Exception) { + Log.e("Requete API",e.message.toString()) + } } -fun fetchScientifiques(index: Int) { +fun fetchScientifiques(index: Int) = flow { val serviceClient = createRequestService().create() - Log.d("Requete API","Fetch plusieurs scientifiques") - serviceClient.getScientifiques(index).enqueue( - object: Callback { - override fun onResponse( - call: Call, - response: Response - ) { - // NOTE : il faudrait probablement utiliser une autre exception - // exception personnalisée ? - val data = response.body() ?: - throw IllegalArgumentException("ERREUR : l'api a donné une réponse vide") - // Devrait appeler le ModelView, la méthode onResponse ne renvoit rien - // Pour le moment des print pour vérifier que la requêtre fonctionne - // sans avoir besoin des vues. - for (scientifique in data.scientifiques) { - - Log.d("Requete API",scientifique.id.toString()) - Log.d("Requete API", scientifique.nom) - } - } - - override fun onFailure(call: Call, t: Throwable) { - Log.e("Requete API","Erreur lors d'une requete api") - throw t - } - } - ) + try { + val response = serviceClient.getScientifiques(index) + emit(response) + } catch (e: Exception) { + Log.e("Requete API",e.message.toString()) + } } \ No newline at end of file