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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# [FEATURE] Quick add for shopping list items
## Description
Add a quick add interface for shopping list items.
## User Story
As a user, I want to quickly add items to my shopping list without navigating away.
## Technical Context
- Requires decision on backend: PlanToEat API vs local SQLite
- May need new table `shopping_items` if local
- Could integrate with modal menu from issue #002
## Test Strategy
### Unit Test (Red)
**File:** `internal/store/sqlite_test.go`
```go
func TestAddShoppingItem(t *testing.T) {
store := setupTestStore(t)
err := store.AddShoppingItem(ShoppingItem{
Name: "Milk",
Quantity: "1 gallon",
})
assert.NoError(t, err)
items, _ := store.GetShoppingItems()
assert.Len(t, items, 1)
assert.Equal(t, "Milk", items[0].Name)
}
```
### E2E Test (Red)
Quick-add form submits, item appears in list.
## Proposed Approach
1. **Decide backend:**
- Option A: PlanToEat API (if it supports shopping lists)
- Option B: Local SQLite table (simpler, offline-capable)
2. **Database (if local):**
```sql
CREATE TABLE shopping_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
quantity TEXT,
checked BOOLEAN DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
3. **Handler:**
- `POST /api/shopping/add` — add item
- `GET /api/shopping` — list items
- `PUT /api/shopping/{id}/check` — toggle checked
- `DELETE /api/shopping/{id}` — remove item
4. **UI:**
- Quick-add form in modal menu (integrate with #002) or meals tab
- Simple input: item name, optional quantity
- List view with checkboxes
## Affected Components
- `internal/store/sqlite.go` (new table/methods)
- `internal/store/sqlite_test.go`
- `internal/handlers/handlers.go` (new endpoints)
- `web/templates/partials/shopping-list.html` (new)
- Potentially `web/templates/partials/modal-menu.html` (from #002)
## Definition of Done
- [ ] Can add items via quick-add form
- [ ] Items persisted (API or local)
- [ ] Items displayed in list view
- [ ] Can check/uncheck items
- [ ] Can delete items
- [ ] Unit tests for store operations
- [ ] E2E test for add flow
|