๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ’ป/Nutri Capture

Nutri Capture ๋ฐฑ์—”๋“œ - DeleteDayMeal ์ด๋ฒคํŠธ ์ถ”๊ฐ€

interfacer_han 2024. 11. 28. 17:59

#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

 

GitHub - Kanmanemone/nutri-capture-new

Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.

github.com

 

#4-2 ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๊ฐ€์žฅ ์ตœ์‹  Commit

 

GitHub - Kanmanemone/nutri-capture-new

Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.

github.com