From 4f55f737b40c3f2663344cfc8e28738c1d8f9257 Mon Sep 17 00:00:00 2001 From: Zyad Date: Fri, 27 Jun 2025 02:18:31 +0300 Subject: [PATCH] fix: category tasks count update after task edit --- .../tudee/data/service/TasksServicesImpl.kt | 18 +++++++++++++++--- .../categoriesScreen/CategoryScreen.kt | 10 ++++++++++ .../categoriesScreen/CategoryViewModel.kt | 2 +- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/moscow/tudee/data/service/TasksServicesImpl.kt b/app/src/main/java/com/moscow/tudee/data/service/TasksServicesImpl.kt index e5841c08..c5e96908 100644 --- a/app/src/main/java/com/moscow/tudee/data/service/TasksServicesImpl.kt +++ b/app/src/main/java/com/moscow/tudee/data/service/TasksServicesImpl.kt @@ -1,6 +1,5 @@ package com.moscow.tudee.data.service -import android.util.Log import com.moscow.tudee.data.local.dao.CategoryDao import com.moscow.tudee.data.local.dao.TaskDao import com.moscow.tudee.data.local.mapper.toCategory @@ -55,7 +54,10 @@ class TasksServicesImpl( return tasks.toTasksBySingleCategory(category) } - override suspend fun getTasksByCategoryAndStatus(categoryId: Long, status: Task.Status): List { + override suspend fun getTasksByCategoryAndStatus( + categoryId: Long, + status: Task.Status + ): List { val tasks = taskDao.getTasksByCategoryAndStatus(categoryId, status.name) val category = categoryDao.getCategoryById(categoryId) ?: throw IllegalStateException("No Category for id=$categoryId") @@ -72,7 +74,7 @@ class TasksServicesImpl( return taskEntity.toTask(domainCategory) } - override suspend fun changeTaskStatus(taskId: Long,updatedStatus: Task.Status) { + override suspend fun changeTaskStatus(taskId: Long, updatedStatus: Task.Status) { taskDao.updateTaskStatus(taskId, updatedStatus.name) } @@ -84,7 +86,17 @@ class TasksServicesImpl( } override suspend fun updateTask(task: Task) { + task.id?.let { taskId -> + taskDao.getTaskById(taskId)?.let { oldTask -> + categoryDao.getCategoryById(oldTask.categoryId)?.let { oldCategory -> + categoryDao.decrementTaskCount(oldCategory.id) + } + } + } + taskDao.updateTask(task.toTaskEntity()) + + categoryDao.incrementTaskCount(task.category.id) } override suspend fun deleteTask(taskId: Long) { diff --git a/app/src/main/java/com/moscow/tudee/presentation/screen/category/categoriesScreen/CategoryScreen.kt b/app/src/main/java/com/moscow/tudee/presentation/screen/category/categoriesScreen/CategoryScreen.kt index 138b5913..057e3ef3 100644 --- a/app/src/main/java/com/moscow/tudee/presentation/screen/category/categoriesScreen/CategoryScreen.kt +++ b/app/src/main/java/com/moscow/tudee/presentation/screen/category/categoriesScreen/CategoryScreen.kt @@ -20,7 +20,10 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.repeatOnLifecycle import coil.compose.rememberAsyncImagePainter import com.moscow.tudee.R import com.moscow.tudee.presentation.base.ObserveAsEvent @@ -46,6 +49,13 @@ fun CategoryScreen( viewModel.onReturnedFromEditWithMessage(messageId) } + val lifecycleOwner = LocalLifecycleOwner.current + LaunchedEffect(lifecycleOwner.lifecycle) { + lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { + viewModel.getAllCategories() + } + } + val uiState by viewModel.uiState.collectAsStateWithLifecycle() ObserveAsEvent(viewModel.uiEvent) { event -> when (event) { diff --git a/app/src/main/java/com/moscow/tudee/presentation/screen/category/categoriesScreen/CategoryViewModel.kt b/app/src/main/java/com/moscow/tudee/presentation/screen/category/categoriesScreen/CategoryViewModel.kt index 170d6670..26d0f684 100644 --- a/app/src/main/java/com/moscow/tudee/presentation/screen/category/categoriesScreen/CategoryViewModel.kt +++ b/app/src/main/java/com/moscow/tudee/presentation/screen/category/categoriesScreen/CategoryViewModel.kt @@ -30,7 +30,7 @@ class CategoryViewModel( } } - private fun getAllCategories() { + fun getAllCategories() { launchWithResult( action = { categoryServices.getCategories() }, onSuccess = ::onGetAllCategoriesSuccess,