From 0d022846c0e244513fdc6495d6c5d8f54cdabd00 Mon Sep 17 00:00:00 2001 From: Renaud BEURET Date: Mon, 1 Apr 2024 17:08:39 +0200 Subject: [PATCH] [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