[FIX] Requete API (a appler dans vue)

pull/24/head
Renaud BEURET 1 year ago
parent de7648ea42
commit de65dca150

@ -19,8 +19,6 @@ import fr.iut.sciencequest.ui.theme.ScienceQuestTheme
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val vm = viewModels<ScientifiquesDecouvertsVM>().value
vm.addScientifiques(StubScientifique1.ToModel())
setContent { setContent {
ScienceQuestTheme { ScienceQuestTheme {
// A surface container using the 'background' color from the theme // A surface container using the 'background' color from the theme

@ -3,22 +3,32 @@ package fr.iut.sciencequest.ViewModels
import android.util.Log import android.util.Log
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateListOf
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel 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 fr.iut.sciencequest.model.metier.Scientifique
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
class ScientifiquesDecouvertsVM : ViewModel() { class ScientifiquesDecouvertsVM : ViewModel() {
private var listeScientifique: MutableList<Scientifique> = mutableStateListOf<Scientifique>() var listeScientifique: MutableList<Scientifique> = mutableStateListOf()
fun getScientifiques(): MutableList<Scientifique> { // fun getScientifiqueById(id: Int) {
Log.d("ViewModel","""je get un scientifique, taille act : ${listeScientifique.size}""") // Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id")
return listeScientifique // var scientifique: Scientifique
} // viewModelScope.launch {
//
fun addScientifiques(scientifique: Scientifique) { // }
if (listeScientifique.add(scientifique)) { // }
Log.d("ViewModel","""j'ajoute un scientifique, taille act : ${listeScientifique.size}""") fun getScientifiques(page: Int) {
} else { Log.d("ViewModelScientifique","Recup la liste de scientifiques")
Log.d("ViewModel","Erreur lors d'un ajout") viewModelScope.launch {
fetchScientifiques(page).collect() {
listeScientifique = it.scientifiques.ToModel().toMutableList();
}
} }
} }
} }

@ -14,8 +14,8 @@ import retrofit2.http.Query
interface ScientifiqueRequestService { interface ScientifiqueRequestService {
@GET("scientifiques?page") @GET("scientifiques?page")
fun getScientifiques(@Query("page") index: Int): Call<ScientifiqueListDTO> suspend fun getScientifiques(@Query("page") index: Int): ScientifiqueListDTO
@GET("scientifiques/{id}") @GET("scientifiques/{id}")
fun getScientifique(@Path("id") id: Int): Call<ScientifiqueDTO> suspend fun getScientifique(@Path("id") id: Int): ScientifiqueDTO
} }

@ -4,67 +4,29 @@ import android.util.Log
import fr.iut.sciencequest.model.buisness.createRequestService import fr.iut.sciencequest.model.buisness.createRequestService
import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueDTO import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueDTO
import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueListDTO import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueListDTO
import kotlinx.coroutines.flow.flow
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import retrofit2.create import retrofit2.create
import java.lang.IllegalArgumentException import java.lang.IllegalArgumentException
fun fetchScientifiqueById(id: Int) { suspend fun fetchScientifiqueById(id: Int) = flow {
val serviceClient = createRequestService().create<ScientifiqueRequestService>() val serviceClient = createRequestService().create<ScientifiqueRequestService>()
Log.d("Requete API","Fetch un scientifique") try {
serviceClient.getScientifique(id).enqueue( val response = serviceClient.getScientifique(id)
object: Callback<ScientifiqueDTO> { emit(response)
override fun onResponse( } catch (e: Exception) {
call: Call<ScientifiqueDTO>, Log.e("Requete API",e.message.toString())
response: Response<ScientifiqueDTO> }
) {
// 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<ScientifiqueDTO>, t: Throwable) {
Log.e("Requete API","Erreur lors d'une requete api")
throw t
}
}
)
} }
fun fetchScientifiques(index: Int) { fun fetchScientifiques(index: Int) = flow {
val serviceClient = createRequestService().create<ScientifiqueRequestService>() val serviceClient = createRequestService().create<ScientifiqueRequestService>()
Log.d("Requete API","Fetch plusieurs scientifiques") try {
serviceClient.getScientifiques(index).enqueue( val response = serviceClient.getScientifiques(index)
object: Callback<ScientifiqueListDTO> { emit(response)
override fun onResponse( } catch (e: Exception) {
call: Call<ScientifiqueListDTO>, Log.e("Requete API",e.message.toString())
response: Response<ScientifiqueListDTO> }
) {
// 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<ScientifiqueListDTO>, t: Throwable) {
Log.e("Requete API","Erreur lors d'une requete api")
throw t
}
}
)
} }
Loading…
Cancel
Save