diff options
Diffstat (limited to 'internal/handlers/widget.go')
| -rw-r--r-- | internal/handlers/widget.go | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/internal/handlers/widget.go b/internal/handlers/widget.go index de2e856..a7f7b66 100644 --- a/internal/handlers/widget.go +++ b/internal/handlers/widget.go @@ -963,8 +963,8 @@ func (h *Handler) HandleWidgetLabelsBudgetTracked(w http.ResponseWriter, r *http } type chainCreateRequest struct { - Name string `json:"name"` - Tasks []string `json:"tasks"` + Name string `json:"name"` + Tasks []models.ChainTaskInput `json:"tasks"` } type chainCreateResponse struct { @@ -972,8 +972,9 @@ type chainCreateResponse struct { } // HandleWidgetChainsCreate creates a linear task chain: a backing project -// plus one native_tasks row per title in req.Tasks, position 0 unlocked and -// due now, the rest locked with no due date. +// plus one native_tasks row per entry in req.Tasks (content required; +// description and priority optional, priority defaulting to 1), position 0 +// unlocked and due now, the rest locked with no due date. func (h *Handler) HandleWidgetChainsCreate(w http.ResponseWriter, r *http.Request) { var req chainCreateRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { @@ -984,6 +985,12 @@ func (h *Handler) HandleWidgetChainsCreate(w http.ResponseWriter, r *http.Reques http.Error(w, "name and at least one task are required", http.StatusBadRequest) return } + for _, t := range req.Tasks { + if strings.TrimSpace(t.Content) == "" { + http.Error(w, "every task requires non-empty content", http.StatusBadRequest) + return + } + } chain, err := h.store.CreateChain(req.Name, req.Tasks) if err != nil { http.Error(w, "failed to create chain", http.StatusInternalServerError) |
