diff options
Diffstat (limited to 'internal/handlers/widget.go')
| -rw-r--r-- | internal/handlers/widget.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/internal/handlers/widget.go b/internal/handlers/widget.go index 360ccc5..ee13dc4 100644 --- a/internal/handlers/widget.go +++ b/internal/handlers/widget.go @@ -101,6 +101,37 @@ type widgetCompleteRequest struct { Source string `json:"source"` } +type widgetRescheduleRequest struct { + ID string `json:"id"` + Source string `json:"source"` + Date string `json:"date"` // YYYY-MM-DD +} + +// HandleWidgetReschedule updates the due date of a native task. +func (h *Handler) HandleWidgetReschedule(w http.ResponseWriter, r *http.Request) { + var req widgetRescheduleRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "bad request", http.StatusBadRequest) + return + } + if req.Source != "doot" { + http.Error(w, "only doot tasks can be rescheduled via widget", http.StatusBadRequest) + return + } + parsed, err := time.Parse("2006-01-02", req.Date) + if err != nil { + http.Error(w, "invalid date", http.StatusBadRequest) + return + } + tz := config.GetDisplayTimezone() + dueDate := time.Date(parsed.Year(), parsed.Month(), parsed.Day(), 0, 0, 0, 0, tz) + if err := h.store.RescheduleNativeTask(req.ID, dueDate); err != nil { + http.Error(w, "failed to reschedule", http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusOK) +} + // HandleWidgetComplete proxies a task completion to the source API or native store. func (h *Handler) HandleWidgetComplete(w http.ResponseWriter, r *http.Request) { var req widgetCompleteRequest |
