From 7fd381a242f68b7c6f10db4e3ae0bb3d06e36a16 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Thu, 22 Jan 2026 10:09:07 -1000 Subject: Fix background image CORS issue Switch from Unsplash Source API to Lorem Picsum which has proper CORS headers for cross-origin image loading. Co-Authored-By: Claude Opus 4.5 --- issues/013-quick-add-shopping-list.md | 81 +++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 issues/013-quick-add-shopping-list.md (limited to 'issues/013-quick-add-shopping-list.md') diff --git a/issues/013-quick-add-shopping-list.md b/issues/013-quick-add-shopping-list.md new file mode 100644 index 0000000..e09ab92 --- /dev/null +++ b/issues/013-quick-add-shopping-list.md @@ -0,0 +1,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 -- cgit v1.2.3