[ADD] Repo pour injecter fournisseur (et pouvoir tester vm)

RepositoryAndroid
Renaud BEURET 1 year ago
parent 15a6829ee8
commit 0d022846c0

@ -3,20 +3,7 @@
<component name="deploymentTargetDropDown"> <component name="deploymentTargetDropDown">
<value> <value>
<entry key="app"> <entry key="app">
<State> <State />
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="/local/avd/Pixel_7_Pro_API_34.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-03-21T10:47:15.864183783Z" />
</State>
</entry> </entry>
</value> </value>
</component> </component>

@ -7,18 +7,25 @@ import androidx.compose.runtime.toMutableStateList
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel 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.viewModelScope
import androidx.lifecycle.viewmodel.CreationExtras
import fr.iut.sciencequest.ViewModels.UiStates.ScientifiqueDecouvertsUIState import fr.iut.sciencequest.ViewModels.UiStates.ScientifiqueDecouvertsUIState
import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById
import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques
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.model.repositories.scientifique.IScientifiqueRepository
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class ScientifiquesDecouvertsVM : ViewModel() { class ScientifiquesDecouvertsVM(
val repository: IScientifiqueRepository,
var listeScientifique: MutableStateFlow<ScientifiqueDecouvertsUIState> = MutableStateFlow(ScientifiqueDecouvertsUIState()) var listeScientifique: MutableStateFlow<ScientifiqueDecouvertsUIState> = MutableStateFlow(ScientifiqueDecouvertsUIState())
) : ViewModel() {
// fun getScientifiqueById(id: Int) { // fun getScientifiqueById(id: Int) {
// Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id") // Log.d("ViewModelScientifique", "Recup un scientifique d'id: $id")
@ -30,9 +37,27 @@ class ScientifiquesDecouvertsVM : ViewModel() {
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 {
fetchScientifiques(page).collect { repository.fetchScientifiques(page).collect {
listeScientifique.value = ScientifiqueDecouvertsUIState(it.scientifiques.ToModel().toMutableList()) listeScientifique.value = ScientifiqueDecouvertsUIState(it.toMutableList())
} }
} }
} }
companion object {
val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(
modelClass: Class<T>,
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
}
}
} }

@ -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<ScientifiqueRequestService>()
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<ScientifiqueRequestService>()
try {
val response = serviceClient.getScientifiques(index)
emit(response)
} catch (e: Exception) {
Log.e("Requete API",e.message.toString())
}
}

@ -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<List<Scientifique>>
suspend fun fetchScientifiqueById(id: Int): Flow<Scientifique>
}

@ -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<Scientifique> = flow {
val serviceClient = createRequestService().create<ScientifiqueRequestService>()
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<List<Scientifique>> = flow {
val serviceClient = createRequestService().create<ScientifiqueRequestService>()
try {
val response = serviceClient.getScientifiques(index)
emit(response.scientifiques.ToModel())
} catch (e: Exception) {
Log.e("Requete API",e.message.toString())
}
}
}
Loading…
Cancel
Save