# [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