Add nextDueDate field to TaskResponse for recurring task support
- Add nextDueDate field to TaskResponse model (from API's next_due_date) - Add effectiveDueDate computed property (nextDueDate ?? dueDate) - Update DynamicTaskCard, TaskCard to display effectiveDueDate - Update WidgetDataManager to save effectiveDueDate to widget cache - Update TaskFormView to use effectiveDueDate when editing - Fix preview mock data to include nextDueDate parameter This ensures recurring tasks show the correct next due date after completion instead of the original due date. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user