applyTerminalDateLogic auto-sets or clears completed_at/cancelled_at based on status transitions.
(task *model.Task, req *taskfile.UpdateRequest)
| 187 | |
| 188 | // applyTerminalDateLogic auto-sets or clears completed_at/cancelled_at based on status transitions. |
| 189 | func applyTerminalDateLogic(task *model.Task, req *taskfile.UpdateRequest) { |
| 190 | if req.Status == nil { |
| 191 | return |
| 192 | } |
| 193 | today := time.Now().Format("2006-01-02") |
| 194 | newStatus := model.Status(*req.Status) |
| 195 | wasTerminal := task.Status.IsResolved() |
| 196 | |
| 197 | switch { |
| 198 | case newStatus == model.StatusCompleted: |
| 199 | req.Completed = &today |
| 200 | req.RemoveFields = append(req.RemoveFields, "cancelled_at") |
| 201 | case newStatus == model.StatusCancelled: |
| 202 | req.CancelledAt = &today |
| 203 | req.RemoveFields = append(req.RemoveFields, "completed_at") |
| 204 | case wasTerminal: |
| 205 | // Reopening: task was completed/cancelled, now moving to a non-terminal status. |
| 206 | req.RemoveFields = append(req.RemoveFields, "completed_at", "cancelled_at") |
| 207 | } |
| 208 | } |
| 209 | |
| 210 | func buildSetRequest(cmd *cobra.Command) (taskfile.UpdateRequest, error) { |
| 211 | if err := resolveDoneFlag(cmd); err != nil { |