blob: f68a9636d10800f7284830384590f7fade2224a3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# Phase 3 Step 4: Todoist Write Operations
## Goal
Implement write operations for Todoist (Create Task, Complete Task) and update the UI to support them.
## Requirements
### Backend
1. **Models**:
* Add `Project` struct to `internal/models/types.go`.
* Add `Projects []Project` to `DashboardData`.
2. **API (`internal/api/todoist.go`)**:
* Refactor `GetProjects` to return `[]models.Project`.
* Implement `CreateTask(content, projectID string)`.
* Implement `CompleteTask(taskID string)`.
* Refactor `baseURL` to be a struct field for testability.
3. **Handlers (`internal/handlers/handlers.go`)**:
* Update `aggregateData` to fetch projects and populate `DashboardData`.
* Implement `HandleCreateTask`:
* Parse form (`content`, `project_id`).
* Call `CreateTask`.
* Return updated task list partial.
* Implement `HandleCompleteTask`:
* Call `CompleteTask`.
* Return empty string (to remove from DOM).
### Frontend
1. **Template (`web/templates/partials/todoist-tasks.html`)**:
* Add "Quick Add" form at the top.
* Input: Task content.
* Select: Project (populated from `.Projects`).
* Update Task Items:
* Add Checkbox.
* `hx-post="/tasks/complete"`.
* `hx-target="closest .todoist-task-item"`.
* `hx-swap="outerHTML"`.
## Verification
* Unit tests for API client.
* Manual verification of UI flows.
|