diff --git a/internal/services/task_service.go b/internal/services/task_service.go index 48cb031..b6e035c 100644 --- a/internal/services/task_service.go +++ b/internal/services/task_service.go @@ -628,11 +628,22 @@ func (s *TaskService) QuickComplete(taskID uint, userID uint) error { // Update next_due_date and in_progress based on frequency if task.Frequency == nil || task.Frequency.Days == nil || *task.Frequency.Days == 0 { // One-time task - clear next_due_date (completion is determined by NextDueDate == nil + has completions) + log.Info(). + Uint("task_id", task.ID). + Bool("frequency_nil", task.Frequency == nil). + Msg("QuickComplete: One-time task, clearing next_due_date") task.NextDueDate = nil task.InProgress = false } else { // Recurring task - calculate next due date from completion date + frequency nextDue := completedAt.AddDate(0, 0, *task.Frequency.Days) + log.Info(). + Uint("task_id", task.ID). + Str("frequency_name", task.Frequency.Name). + Int("frequency_days", *task.Frequency.Days). + Time("completed_at", completedAt). + Time("next_due_date", nextDue). + Msg("QuickComplete: Recurring task, setting next_due_date") task.NextDueDate = &nextDue // Reset in_progress to false @@ -640,7 +651,9 @@ func (s *TaskService) QuickComplete(taskID uint, userID uint) error { } if err := s.taskRepo.Update(task); err != nil { log.Error().Err(err).Uint("task_id", task.ID).Msg("Failed to update task after quick completion") + return err // Return error so caller knows the update failed } + log.Info().Uint("task_id", task.ID).Msg("QuickComplete: Task updated successfully") // Send notification (fire and forget) go s.sendTaskCompletedNotification(task, completion)