[FIX] Meilleur repository pour Scientifique

RepositoryAndroid
Renaud BEURET 1 year ago
parent 981afd5a3a
commit 7362763f9b

@ -21,11 +21,6 @@ class QuestionAPIRepository : IQuestionRepository {
get() = _questions.asStateFlow() get() = _questions.asStateFlow()
override suspend fun fetchQuestions(index: Int) { override suspend fun fetchQuestions(index: Int) {
//1. appel à l'api QuestionRequestService
//2. fill _questions with QuestionRequestService response
// _questions.update {
//
// }
val serviceClient = createRequestService().create<QuestionRequestService>() val serviceClient = createRequestService().create<QuestionRequestService>()
try { try {
_questions.value = serviceClient.getQuestions(index).questions.ToModel() _questions.value = serviceClient.getQuestions(index).questions.ToModel()

@ -1,9 +1,14 @@
package fr.iut.sciencequest.model.repositories.scientifique package fr.iut.sciencequest.model.repositories.scientifique
import fr.iut.sciencequest.model.metier.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.Flow
import kotlinx.coroutines.flow.StateFlow
interface IScientifiqueRepository { interface IScientifiqueRepository {
suspend fun fetchScientifiques(index: Int): Flow<List<Scientifique>>
suspend fun fetchScientifiqueById(id: Int): Flow<Scientifique> val scientifique: StateFlow<Scientifique>
val scientifiques: StateFlow<List<Scientifique>>
suspend fun fetchScientifiques(index: Int)
suspend fun fetchScientifiqueById(id: Int)
} }

@ -1,32 +1,44 @@
package fr.iut.sciencequest.model.repositories.scientifique package fr.iut.sciencequest.model.repositories.scientifique
import android.util.Log 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.Scientifique.ScientifiqueRequestService
import fr.iut.sciencequest.model.buisness.createRequestService import fr.iut.sciencequest.model.buisness.createRequestService
import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.dto.extensions.ToModel
import fr.iut.sciencequest.model.metier.Scientifique import fr.iut.sciencequest.model.metier.Scientifique
import fr.iut.sciencequest.stub.StubScientifique1
import kotlinx.coroutines.flow.Flow 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.flow
import retrofit2.create import retrofit2.create
class ScientifiqueAPIRepository: IScientifiqueRepository { class ScientifiqueAPIRepository: IScientifiqueRepository {
suspend override fun fetchScientifiqueById(id: Int): Flow<Scientifique> = flow {
private val _scientifique = MutableStateFlow<Scientifique>(StubScientifique1.ToModel())
override val scientifique: StateFlow<Scientifique>
get() = _scientifique.asStateFlow()
private val _scientifiques = MutableStateFlow<List<Scientifique>>(emptyList())
override val scientifiques: StateFlow<List<Scientifique>>
get() = _scientifiques.asStateFlow()
override suspend fun fetchScientifiqueById(id: Int) {
val serviceClient = createRequestService().create<ScientifiqueRequestService>() val serviceClient = createRequestService().create<ScientifiqueRequestService>()
try { try {
val response = serviceClient.getScientifique(id) _scientifique.value = serviceClient.getScientifique(id).ToModel()
emit(response.ToModel())
} catch (e: Exception) { } 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<List<Scientifique>> = flow { override suspend fun fetchScientifiques(index: Int) {
val serviceClient = createRequestService().create<ScientifiqueRequestService>() val serviceClient = createRequestService().create<ScientifiqueRequestService>()
try { try {
val response = serviceClient.getScientifiques(index) _scientifiques.value = serviceClient.getScientifiques(index).scientifiques.ToModel()
emit(response.scientifiques.ToModel())
} catch (e: Exception) { } catch (e: Exception) {
Log.e("Requete API",e.message.toString()) Log.e("Requete API Scientifiqu", e.message.toString())
} }
} }
} }

@ -18,8 +18,9 @@ class PenduViewModel(
fun InitPartie() { fun InitPartie() {
Log.d("PenduViewModel","Un utilisateur initialise une partie") Log.d("PenduViewModel","Un utilisateur initialise une partie")
viewModelScope.launch { viewModelScope.launch {
scientifiqueRepo.fetchScientifiqueById(1).collect { scientifiqueRepo.fetchScientifiqueById(1)
val nomComplet = it.prenom + " " + it.nom val scientifique = scientifiqueRepo.scientifique.value
val nomComplet = scientifique.prenom + " " + scientifique.nom
Log.d("ViewModelPendu",nomComplet) Log.d("ViewModelPendu",nomComplet)
var motATrou = "" var motATrou = ""
for (chr in nomComplet) { for (chr in nomComplet) {
@ -36,7 +37,6 @@ class PenduViewModel(
) )
} }
} }
}
// mot : mot à trouver // mot : mot à trouver
// motAct : état actuel du mot trouvé par l'utilisateur // motAct : état actuel du mot trouvé par l'utilisateur

@ -20,9 +20,8 @@ class ScientifiquesDecouvertsVM(
fun getScientifiques(page: Int) { fun getScientifiques(page: Int) {
Log.d("ViewModelScientifique","Recup la liste de scientifiques") Log.d("ViewModelScientifique","Recup la liste de scientifiques")
viewModelScope.launch { viewModelScope.launch {
repository.fetchScientifiques(page).collect { repository.fetchScientifiques(page)
_listeScientifique.value = ScientifiqueDecouvertsUIState(it.toMutableList()) _listeScientifique.value = ScientifiqueDecouvertsUIState(repository.scientifiques.value.toMutableList())
}
} }
} }
companion object { companion object {

Loading…
Cancel
Save