summaryrefslogtreecommitdiff
path: root/issues/013-quick-add-shopping-list.md
blob: e09ab92d7fdfa8645d790c93b7bff0e69ba3f6f7 (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
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