[FIX] Requete API (a appler dans vue)

RepositoryAndroid
Renaud BEURET 1 year ago
parent de7648ea42
commit de65dca150

@ -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<ScientifiquesDecouvertsVM>().value
vm.addScientifiques(StubScientifique1.ToModel())
setContent {
ScienceQuestTheme {
// A surface container using the 'background' color from the theme

@ -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<Scientifique> = mutableStateListOf<Scientifique>()
var listeScientifique: MutableList<Scientifique> = mutableStateListOf()
fun getScientifiques(): MutableList<Scientifique> {
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();
}
}
}
}

@ -14,8 +14,8 @@ import retrofit2.http.Query
interface ScientifiqueRequestService {
@GET("scientifiques?page")
fun getScientifiques(@Query("page") index: Int): Call<ScientifiqueListDTO>
suspend fun getScientifiques(@Query("page") index: Int): ScientifiqueListDTO
@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.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<ScientifiqueRequestService>()
Log.d("Requete API","Fetch un scientifique")
serviceClient.getScientifique(id).enqueue(
object: Callback<ScientifiqueDTO> {
override fun onResponse(
call: Call<ScientifiqueDTO>,
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
}
}
)
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<ScientifiqueRequestService>()
Log.d("Requete API","Fetch plusieurs scientifiques")
serviceClient.getScientifiques(index).enqueue(
object: Callback<ScientifiqueListDTO> {
override fun onResponse(
call: Call<ScientifiqueListDTO>,
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
}
}
)
try {
val response = serviceClient.getScientifiques(index)
emit(response)
} catch (e: Exception) {
Log.e("Requete API",e.message.toString())
}
}
Loading…
Cancel
Save