#1 개요
최근 프론트엔드에서는 DayMealView 테이블만을 사용하므로, NutrientViewModelEvent.kt에 정의해두었던 DeleteMeal()이 사용될 일이 없다. 따라서, DeleteDayMeal() 이벤트를 새로 만든다.
#2 코드
#2-1 NutrientViewModelEvent.kt
...
sealed class NutrientViewModelEvent {
...
data class DeleteMeal(val meal: Meal) : NutrientViewModelEvent()
data class DeleteDayMeal(val dayMeal: DayMealView) : NutrientViewModelEvent()
}
본 게시글의 목적과 별개로, NutrientViewModelEvent에 정의했던 DeleteMeal() 이벤트에 쓸 데 없이 Date형 인수가 있었다. 삭제한다.
#2-2 NutrientViewModel.kt
...
class NutrientViewModel(private val repository: MainRepository) : ViewModel() {
...
// (4) View로부터 받은 이벤트 처리
fun onEvent(event: NutrientViewModelEvent) {
when (event) {
...
is NutrientViewModelEvent.DeleteDayMeal -> {
viewModelScope.launch {
var deletedRowCount = 0
deletedRowCount = repository.deleteDayMeal(event.dayMeal)
if (deletedRowCount == 1) {
_nutrientScreenState.value.dayMeals.removeIf { it.mealId == event.dayMeal.mealId }
}
}
}
}
}
}
...
#2-3 MainRepository.kt
...
class MainRepository(private val dao: MainDAO) {
...
suspend fun deleteMeal(meal: Meal): Int {
val deletedRowCount = dao.deleteMeal(meal)
if (deletedRowCount == 0) {
return 0
} else {
val mealCount = dao.getMealCountForDay(meal.dayId)
if (mealCount == 0) {
dao.deleteDay(meal.dayId)
}
return deletedRowCount
}
}
...
suspend fun deleteDayMeal(dayMeal: DayMealView): Int {
val deletedRowCount = dao.deleteMeal(dayMeal.mealId)
if (deletedRowCount == 0) {
return 0
} else {
val mealCount = dao.getMealCountForDay(dayMeal.dayId)
if (mealCount == 0) {
dao.deleteDay(dayMeal.dayId)
}
return deletedRowCount
}
}
}
기존에 있던 deleteMeal() 함수를 참조해, deleteDayMeal() 함수를 만들었다.
#2-4 MainDAO.kt
...
@Dao
interface MainDAO {
...
@Delete
suspend fun deleteMeal(meal: Meal): Int
@Query("DELETE FROM meal_table WHERE meal_id = :mealId")
suspend fun deleteMeal(mealId: Long): Int
...
}
mealId를 인수로 받는 deleteMeal() 함수를 추가한다 (메소드 오버로딩). 위에 있는 deleteMeal()은 #2-3 코드 속 deleteMeal()이 사용하고, 아래에 있는 deleteMeal()은 #2-3 코드 속 deleteDayMeal()이 사용한다.
#3 요약
NutrientViewModelEvent.DeleteDayMeal 이벤트를 추가했다.
#4 완성된 앱
#4-1 이 게시글 시점의 Commit
#4-2 본 프로젝트의 가장 최신 Commit
'App 개발 일지 > Nutri Capture' 카테고리의 다른 글
Nutri Capture 프론트엔드 - item 추가ㆍ제거 애니메이션 (0) | 2024.12.15 |
---|---|
Nutri Capture 프론트엔드 - INSERT 및 DELETE 버튼 구현 (1) | 2024.11.28 |
Nutri Capture 백엔드 - DAO 논리적 오류 수정 (0) | 2024.11.26 |
Nutri Capture 프론트엔드 - 무한 스크롤 로직 리팩토링 (0) | 2024.11.16 |
Nutri Capture 백엔드 - Room 무결성 보완 (1) | 2024.11.15 |