docs(19-03): complete global item tag filtering and COALESCE merge plan
This commit is contained in:
@@ -52,7 +52,7 @@ Requirements for this milestone. Each maps to roadmap phases.
|
|||||||
- [ ] **CATFLOW-01**: FAB shows mini menu with "Add to Collection" and "Start Thread" globally, plus "New Setup" on setups page
|
- [ ] **CATFLOW-01**: FAB shows mini menu with "Add to Collection" and "Start Thread" globally, plus "New Setup" on setups page
|
||||||
- [ ] **CATFLOW-02**: Full-screen catalog search with tag chip filtering
|
- [ ] **CATFLOW-02**: Full-screen catalog search with tag chip filtering
|
||||||
- [ ] **CATFLOW-03**: User can add a catalog item to collection as a reference item with personal fields (category, notes, purchase price, image, quantity)
|
- [ ] **CATFLOW-03**: User can add a catalog item to collection as a reference item with personal fields (category, notes, purchase price, image, quantity)
|
||||||
- [ ] **CATFLOW-04**: Collection items referencing global items display merged data (global base + personal overlay)
|
- [x] **CATFLOW-04**: Collection items referencing global items display merged data (global base + personal overlay)
|
||||||
- [ ] **CATFLOW-05**: Thread candidates can be added from catalog with global item link
|
- [ ] **CATFLOW-05**: Thread candidates can be added from catalog with global item link
|
||||||
- [ ] **CATFLOW-06**: Thread resolution with catalog-linked candidate creates reference item with auto-link
|
- [ ] **CATFLOW-06**: Thread resolution with catalog-linked candidate creates reference item with auto-link
|
||||||
- [ ] **CATFLOW-07**: Manual entry fallback when item not in catalog
|
- [ ] **CATFLOW-07**: Manual entry fallback when item not in catalog
|
||||||
@@ -60,8 +60,8 @@ Requirements for this milestone. Each maps to roadmap phases.
|
|||||||
|
|
||||||
### Tags
|
### Tags
|
||||||
|
|
||||||
- [ ] **TAG-01**: Tags table seeded with curated tag set for outdoor/adventure gear
|
- [x] **TAG-01**: Tags table seeded with curated tag set for outdoor/adventure gear
|
||||||
- [ ] **TAG-02**: Global items have multiple tags, searchable and filterable via API
|
- [x] **TAG-02**: Global items have multiple tags, searchable and filterable via API
|
||||||
|
|
||||||
### User Profiles & Sharing
|
### User Profiles & Sharing
|
||||||
|
|
||||||
@@ -166,13 +166,13 @@ Which phases cover which requirements. Updated during roadmap creation.
|
|||||||
| CATFLOW-01 | Phase 20 | Pending |
|
| CATFLOW-01 | Phase 20 | Pending |
|
||||||
| CATFLOW-02 | Phase 20 | Pending |
|
| CATFLOW-02 | Phase 20 | Pending |
|
||||||
| CATFLOW-03 | Phase 19, 21 | Pending |
|
| CATFLOW-03 | Phase 19, 21 | Pending |
|
||||||
| CATFLOW-04 | Phase 19 | Pending |
|
| CATFLOW-04 | Phase 19 | Complete |
|
||||||
| CATFLOW-05 | Phase 19, 21 | Pending |
|
| CATFLOW-05 | Phase 19, 21 | Pending |
|
||||||
| CATFLOW-06 | Phase 19, 21 | Pending |
|
| CATFLOW-06 | Phase 19, 21 | Pending |
|
||||||
| CATFLOW-07 | Phase 22 | Pending |
|
| CATFLOW-07 | Phase 22 | Pending |
|
||||||
| CATFLOW-08 | Phase 22 | Pending |
|
| CATFLOW-08 | Phase 22 | Pending |
|
||||||
| TAG-01 | Phase 19 | Pending |
|
| TAG-01 | Phase 19 | Complete |
|
||||||
| TAG-02 | Phase 19 | Pending |
|
| TAG-02 | Phase 19 | Complete |
|
||||||
|
|
||||||
**Coverage:**
|
**Coverage:**
|
||||||
- v2.0 requirements: 40 total
|
- v2.0 requirements: 40 total
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
- [ ] **Phase 16: Multi-User Data Model** — Add user ownership to all entities with cross-user data isolation
|
- [ ] **Phase 16: Multi-User Data Model** — Add user ownership to all entities with cross-user data isolation
|
||||||
- [ ] **Phase 17: Object Storage** — Move images from local filesystem to MinIO (S3-compatible)
|
- [ ] **Phase 17: Object Storage** — Move images from local filesystem to MinIO (S3-compatible)
|
||||||
- [x] **Phase 18: Global Items & Public Profiles** — Global item catalog, user profiles, and public setup sharing (completed 2026-04-05)
|
- [x] **Phase 18: Global Items & Public Profiles** — Global item catalog, user profiles, and public setup sharing (completed 2026-04-05)
|
||||||
- [ ] **Phase 19: Reference Item Model & Tags Schema** — Collection items as references to global catalog, tag system for discovery
|
- [x] **Phase 19: Reference Item Model & Tags Schema** — Collection items as references to global catalog, tag system for discovery (completed 2026-04-05)
|
||||||
- [ ] **Phase 20: FAB & Full-Screen Catalog Search** — Global FAB with mini menu, full-screen catalog search with tag filtering
|
- [ ] **Phase 20: FAB & Full-Screen Catalog Search** — Global FAB with mini menu, full-screen catalog search with tag filtering
|
||||||
- [ ] **Phase 21: Add-from-Catalog & Thread Integration** — Add catalog items to collection and threads, resolution creates reference items
|
- [ ] **Phase 21: Add-from-Catalog & Thread Integration** — Add catalog items to collection and threads, resolution creates reference items
|
||||||
- [ ] **Phase 22: Manual Entry Fallback** — Manual add for items not in catalog, non-functional submission prompt
|
- [ ] **Phase 22: Manual Entry Fallback** — Manual add for items not in catalog, non-functional submission prompt
|
||||||
@@ -184,11 +184,11 @@ Plans:
|
|||||||
2. Global items can have multiple tags, searchable via API
|
2. Global items can have multiple tags, searchable via API
|
||||||
3. Thread candidates can link to a global item via globalItemId
|
3. Thread candidates can link to a global item via globalItemId
|
||||||
4. Resolving a thread with a catalog-linked candidate creates a reference item with auto-link
|
4. Resolving a thread with a catalog-linked candidate creates a reference item with auto-link
|
||||||
**Plans:** 2/3 plans executed
|
**Plans:** 3/3 plans complete
|
||||||
Plans:
|
Plans:
|
||||||
- [x] 19-01-PLAN.md — Schema, migration, Zod schemas, types, seed script
|
- [x] 19-01-PLAN.md — Schema, migration, Zod schemas, types, seed script
|
||||||
- [x] 19-02-PLAN.md — Item service COALESCE merge, thread resolution, route cleanup
|
- [x] 19-02-PLAN.md — Item service COALESCE merge, thread resolution, route cleanup
|
||||||
- [ ] 19-03-PLAN.md — Global item tag filtering, secondary service merge propagation
|
- [x] 19-03-PLAN.md — Global item tag filtering, secondary service merge propagation
|
||||||
|
|
||||||
### Phase 20: FAB & Full-Screen Catalog Search
|
### Phase 20: FAB & Full-Screen Catalog Search
|
||||||
**Goal**: Users discover and add gear through a catalog-first search experience with tag filtering
|
**Goal**: Users discover and add gear through a catalog-first search experience with tag filtering
|
||||||
@@ -247,7 +247,7 @@ Plans:
|
|||||||
| 16. Multi-User Data Model | v2.0 | 0/? | Not started | - |
|
| 16. Multi-User Data Model | v2.0 | 0/? | Not started | - |
|
||||||
| 17. Object Storage | v2.0 | 0/? | Not started | - |
|
| 17. Object Storage | v2.0 | 0/? | Not started | - |
|
||||||
| 18. Global Items & Public Profiles | v2.0 | 4/5 | Complete | 2026-04-05 |
|
| 18. Global Items & Public Profiles | v2.0 | 4/5 | Complete | 2026-04-05 |
|
||||||
| 19. Reference Item Model & Tags Schema | v2.0 | 2/3 | In Progress| |
|
| 19. Reference Item Model & Tags Schema | v2.0 | 3/3 | Complete | 2026-04-05 |
|
||||||
| 20. FAB & Full-Screen Catalog Search | v2.0 | 0/? | Not started | - |
|
| 20. FAB & Full-Screen Catalog Search | v2.0 | 0/? | Not started | - |
|
||||||
| 21. Add-from-Catalog & Thread Integration | v2.0 | 0/? | Not started | - |
|
| 21. Add-from-Catalog & Thread Integration | v2.0 | 0/? | Not started | - |
|
||||||
| 22. Manual Entry Fallback | v2.0 | 0/? | Not started | - |
|
| 22. Manual Entry Fallback | v2.0 | 0/? | Not started | - |
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ gsd_state_version: 1.0
|
|||||||
milestone: v1.3
|
milestone: v1.3
|
||||||
milestone_name: Research & Decision Tools
|
milestone_name: Research & Decision Tools
|
||||||
status: executing
|
status: executing
|
||||||
stopped_at: Completed 19-02-PLAN.md
|
stopped_at: Completed 19-03-PLAN.md
|
||||||
last_updated: "2026-04-05T18:51:11.895Z"
|
last_updated: "2026-04-05T22:27:05.589Z"
|
||||||
last_activity: 2026-04-05
|
last_activity: 2026-04-05
|
||||||
progress:
|
progress:
|
||||||
total_phases: 13
|
total_phases: 13
|
||||||
completed_phases: 11
|
completed_phases: 12
|
||||||
total_plans: 36
|
total_plans: 36
|
||||||
completed_plans: 33
|
completed_plans: 34
|
||||||
percent: 3
|
percent: 3
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ See: .planning/PROJECT.md (updated 2026-04-03)
|
|||||||
## Current Position
|
## Current Position
|
||||||
|
|
||||||
Phase: 19 of 19 (Reference Item Model & Tags Schema)
|
Phase: 19 of 19 (Reference Item Model & Tags Schema)
|
||||||
Plan: 2 of 3
|
Plan: 3 of 3
|
||||||
Status: Ready to execute
|
Status: Ready to execute
|
||||||
Last activity: 2026-04-05
|
Last activity: 2026-04-05
|
||||||
|
|
||||||
@@ -59,6 +59,7 @@ Key decisions made during v2.0 planning:
|
|||||||
- [Phase 19]: Data migration SQL: UPDATE items before DROP TABLE item_global_links
|
- [Phase 19]: Data migration SQL: UPDATE items before DROP TABLE item_global_links
|
||||||
- [Phase 19]: Flat tags system without type categorization per D-16
|
- [Phase 19]: Flat tags system without type categorization per D-16
|
||||||
- [Phase 19-reference-item-model-tags-schema]: COALESCE merge pattern for transparent reference item data in item/thread services
|
- [Phase 19-reference-item-model-tags-schema]: COALESCE merge pattern for transparent reference item data in item/thread services
|
||||||
|
- [Phase 19-reference-item-model-tags-schema]: COALESCE merge pattern propagated to all secondary services (setup, totals, profile, CSV)
|
||||||
|
|
||||||
### Pending Todos
|
### Pending Todos
|
||||||
|
|
||||||
@@ -71,6 +72,6 @@ None active.
|
|||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-04-05T18:51:11.893Z
|
Last session: 2026-04-05T22:27:05.587Z
|
||||||
Stopped at: Completed 19-02-PLAN.md
|
Stopped at: Completed 19-03-PLAN.md
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
---
|
||||||
|
phase: 19-reference-item-model-tags-schema
|
||||||
|
plan: 03
|
||||||
|
subsystem: api
|
||||||
|
tags: [drizzle, postgresql, coalesce, global-items, tags, csv]
|
||||||
|
|
||||||
|
requires:
|
||||||
|
- phase: 19-reference-item-model-tags-schema (plan 01)
|
||||||
|
provides: globalItems, tags, globalItemTags schema tables, items.globalItemId FK
|
||||||
|
provides:
|
||||||
|
- Tag-filtered global item search with AND intersection logic
|
||||||
|
- COALESCE merge pattern in all secondary services (setup, totals, profile, CSV)
|
||||||
|
- Owner count via direct items.globalItemId FK
|
||||||
|
affects: [client-catalog, client-setup-views, client-profile]
|
||||||
|
|
||||||
|
tech-stack:
|
||||||
|
added: []
|
||||||
|
patterns: [COALESCE merge for reference item data across all query surfaces]
|
||||||
|
|
||||||
|
key-files:
|
||||||
|
created: []
|
||||||
|
modified:
|
||||||
|
- src/server/services/global-item.service.ts
|
||||||
|
- src/server/services/setup.service.ts
|
||||||
|
- src/server/services/totals.service.ts
|
||||||
|
- src/server/services/profile.service.ts
|
||||||
|
- src/server/services/csv.service.ts
|
||||||
|
- src/server/routes/global-items.ts
|
||||||
|
- tests/services/global-item.service.test.ts
|
||||||
|
|
||||||
|
key-decisions:
|
||||||
|
- "COALESCE merge pattern propagated to all 4 secondary services consistently"
|
||||||
|
|
||||||
|
patterns-established:
|
||||||
|
- "COALESCE merge: all services reading item weight/price LEFT JOIN globalItems and COALESCE when globalItemId is set"
|
||||||
|
- "Tag AND filtering: subquery with GROUP BY HAVING COUNT(DISTINCT) for intersection logic"
|
||||||
|
|
||||||
|
requirements-completed: [CATFLOW-04, TAG-01, TAG-02]
|
||||||
|
|
||||||
|
duration: 12min
|
||||||
|
completed: 2026-04-06
|
||||||
|
---
|
||||||
|
|
||||||
|
# Phase 19 Plan 03: Global Item Tag Filtering and Secondary Service COALESCE Merge Summary
|
||||||
|
|
||||||
|
**Tag-filtered global item search with AND logic, owner count via direct FK, and COALESCE merge propagated to setup/totals/profile/CSV services**
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
- **Duration:** 12 min
|
||||||
|
- **Started:** 2026-04-05T22:05:16Z
|
||||||
|
- **Completed:** 2026-04-05T22:17:00Z
|
||||||
|
- **Tasks:** 2
|
||||||
|
- **Files modified:** 7
|
||||||
|
|
||||||
|
## Accomplishments
|
||||||
|
- Global item search supports tag filtering with AND intersection logic via subquery GROUP BY HAVING
|
||||||
|
- Owner count migrated from removed itemGlobalLinks to direct items.globalItemId FK
|
||||||
|
- All 4 secondary services (setup, totals, profile, CSV) LEFT JOIN globalItems and COALESCE weight/price/name for reference items
|
||||||
|
- Route handlers made async with tag query parameter parsing
|
||||||
|
|
||||||
|
## Task Commits
|
||||||
|
|
||||||
|
Each task was committed atomically:
|
||||||
|
|
||||||
|
1. **Task 1: Global item service tag filtering + owner count migration + tests** - `ecc6ac6` (feat) -- pre-existing from wave execution
|
||||||
|
2. **Task 2: Secondary service COALESCE merge propagation** - `0a233c7` (feat)
|
||||||
|
|
||||||
|
## Files Created/Modified
|
||||||
|
- `src/server/services/global-item.service.ts` - Tag-filtered search with ilike and AND logic, owner count via items.globalItemId
|
||||||
|
- `src/server/services/setup.service.ts` - COALESCE merge in getAllSetups totals and getSetupWithItems item list
|
||||||
|
- `src/server/services/totals.service.ts` - COALESCE merge in getCategoryTotals and getGlobalTotals
|
||||||
|
- `src/server/services/profile.service.ts` - COALESCE merge in getPublicProfile totals and getPublicSetupWithItems
|
||||||
|
- `src/server/services/csv.service.ts` - COALESCE merge in exportItemsCsv for name/weight/price
|
||||||
|
- `src/server/routes/global-items.ts` - Async handlers, tags query param parsing
|
||||||
|
- `tests/services/global-item.service.test.ts` - Full async PGlite tests for tag filtering and owner count
|
||||||
|
|
||||||
|
## Decisions Made
|
||||||
|
- COALESCE merge pattern applied consistently across all 4 secondary services using the same LEFT JOIN + CASE WHEN pattern established in plan 02
|
||||||
|
|
||||||
|
## Deviations from Plan
|
||||||
|
None - plan executed exactly as written. Task 1 was already completed from a prior execution wave.
|
||||||
|
|
||||||
|
## Issues Encountered
|
||||||
|
None
|
||||||
|
|
||||||
|
## User Setup Required
|
||||||
|
None - no external service configuration required.
|
||||||
|
|
||||||
|
## Known Stubs
|
||||||
|
None - all services fully wired with COALESCE merge pattern.
|
||||||
|
|
||||||
|
## Next Phase Readiness
|
||||||
|
- All server-side query surfaces now correctly merge global item data for reference items
|
||||||
|
- Client components can rely on merged data from all API endpoints
|
||||||
|
- Ready for client-side catalog and discovery UI work
|
||||||
|
|
||||||
|
---
|
||||||
|
*Phase: 19-reference-item-model-tags-schema*
|
||||||
|
*Completed: 2026-04-06*
|
||||||
Reference in New Issue
Block a user