From 221cf4f80da0ef2589cc4fbaadba3fd7af8293e6 Mon Sep 17 00:00:00 2001 From: Gato Date: Sat, 6 Jun 2026 09:46:42 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20crash=20FOREIGN=20KEY=20lors=20de=20la?= =?UTF-8?q?=20cr=C3=A9ation=20de=20t=C3=A2che=20avant=20sync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Si les projets ne sont pas encore en base Room au moment de l'insertion (première connexion, sync en cours), vérifie que le projet existe avant d'insérer la tâche localement. Sinon, déclenche une sync — la tâche est déjà créée sur l'API et apparaîtra après rafraîchissement. Co-Authored-By: Claude Sonnet 4.6 --- app/build.gradle.kts | 2 +- .../planify/mobile/ui/task/TaskEditViewModel.kt | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f1b226c..1d67e5b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -16,7 +16,7 @@ android { minSdk = 26 targetSdk = 35 versionCode = 1 - versionName = "0.0.10" + versionName = "0.0.11" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/planify/mobile/ui/task/TaskEditViewModel.kt b/app/src/main/java/com/planify/mobile/ui/task/TaskEditViewModel.kt index f666dd5..e903999 100644 --- a/app/src/main/java/com/planify/mobile/ui/task/TaskEditViewModel.kt +++ b/app/src/main/java/com/planify/mobile/ui/task/TaskEditViewModel.kt @@ -7,6 +7,7 @@ import com.planify.mobile.data.bonsai.BonsaiApiClient import com.planify.mobile.data.bonsai.BonsaiAuthManager import com.planify.mobile.data.bonsai.BonsaiSyncManager import com.planify.mobile.data.bonsai.dto.BonsaIssueRequest +import com.planify.mobile.domain.repository.ProjectRepository import com.planify.mobile.data.notification.ReminderScheduler import com.planify.mobile.domain.model.DueDate import com.planify.mobile.domain.model.Reminder @@ -47,6 +48,8 @@ class TaskEditViewModel @Inject constructor( private val reminderScheduler: ReminderScheduler, private val apiClient: BonsaiApiClient, private val authManager: BonsaiAuthManager, + private val syncManager: BonsaiSyncManager, + private val projectRepository: ProjectRepository, ) : ViewModel() { private val _state = MutableStateFlow(TaskEditState()) @@ -147,9 +150,17 @@ class TaskEditViewModel @Inject constructor( addedAt = now, updatedAt = now, ) - if (st.taskId == null) taskRepository.insertTask(task) - else taskRepository.updateTask(task) - saveReminders(task.id, st, task) + // Insert locally only if the project already exists in Room. + // If not (sync not yet complete), the next sync will populate both. + val projectExists = projectRepository.getProjectById(task.projectId) != null + if (projectExists) { + if (st.taskId == null) taskRepository.insertTask(task) + else taskRepository.updateTask(task) + saveReminders(task.id, st, task) + } else { + // Sync will bring the task; trigger it now. + viewModelScope.launch { syncManager.sync() } + } _state.update { it.copy(isSaving = false) } onDone() }