@Dao
interface WorkoutDao {
@Query("SELECT * FROM Workout")
@Transaction
fun getAllWorkoutSetInfoList() : LiveData<List<WorkoutWithSets>>
}
data class WorkoutWithSets(
@Embedded val workout: Workout,
@Relation (
parentColumn = "workoutId", // 참조하는 FK의 Column
entityColumn = "parentWorkoutId" // 참조받는 FK의 Column
)
val sets: List<WorkoutSetInfo>
)
data class Routine(
var workout: Workout,
var sets: List<WorkoutSetInfo>,
var isExpandable: Boolean = false
)
class RoutineRepository(application: Application) {
private val workoutDao: WorkoutDao
lateinit var routine : LiveData<List<Routine>>
init {
workoutDao = DetailDatabase.getDatabase(application).workoutDao()
}
fun getWorkoutInfo() {
Transformations.map(workoutDao.getAllWorkoutSetInfoList()) {
}
}
}
Dao 클래스에서 받아오는 LiveData<List<WorkoutWithSets>>를 Repository 클래스에서
Routine이라는 클래스로 가공을 하여 LIveData를 뷰모델에 리턴해주려고 하는데요,
(사실 WorkoutWithSets와 Routine은 boolean 값 하나차이긴 합니다..)
Transformation.map 이라는걸쓰면 LiveData<X> 에서 LiveData<Y>로 변경해서 반환할수있다고해서
이걸 사용하려고하는데요..
예제 코드들을 보니
val userLiveData : LiveData<User> = MutableLiveData(User("Jone", "Doe"))
val userName : LiveData<String> = Transformations.map(userLiveData) { user ->
user.firstName + user.lastName
}
이런식으로 LiveData의 타입이 List형식이 아니라 User처럼 단일형식이더라구요..
그런데 저같은경우는 List잖아요?
이런경우에는 Transformation.map() { it-> } 내에서 it을 사용하여 다시한번 map을 사용해줘야하나요?
아니면 Transformation.map() 대신에 switchmap을 사용하는게 좋을까요? 이건 내부에서 LiveData를 리턴해줘야해서 Room과 자주 사용된다던데..
또 아니면다른 더 좋은방법있을까요?