summaryrefslogtreecommitdiff
path: root/internal/handlers/widget.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/handlers/widget.go')
-rw-r--r--internal/handlers/widget.go31
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