5.7 KiB
5.7 KiB
Multi-Household Implementation - Quick Reference
Implementation Status
✅ Sprint 1: Database Foundation (COMPLETE)
- Created migration script:
multi_household_architecture.sql - Created migration guide:
MIGRATION_GUIDE.md - Created migration runner scripts:
run-migration.sh/run-migration.bat - Tested migration on 'grocery' database (copy of Costco)
- Migration successful - all data migrated correctly
- Verification passed - 0 data integrity issues
Migration Results:
- ✅ 1 Household created: "Main Household" (invite code: MAIN755114)
- ✅ 7 Users migrated (2 system_admins, 5 standard users)
- ✅ 122 Items extracted to master catalog
- ✅ 122 Household lists created
- ✅ 27 Classifications migrated
- ✅ 273 History records preserved
- ✅ All users assigned to household (admin/user roles)
- ✅ 0 orphaned records or data loss
Database: grocery (using Costco as template for safety)
⏳ Sprint 2: Backend API (NEXT - READY TO START)
- Create household.model.js
- Create store.model.js
- Update list.model.js for household+store scope
- Create householdAccess middleware
- Create storeAccess middleware
- Create households.controller.js
- Create stores.controller.js
- Update lists.controller.js
- Update users.controller.js
- Create/update routes for new structure
⏳ Sprint 3: Frontend Core (PENDING)
- Refactor contexts
- Create household UI
- Create store UI
New Database Schema
Core Tables
- households - Household entities with invite codes
- stores - Store types (Costco, Target, etc.)
- household_members - User membership with per-household roles
- household_stores - Which stores each household uses
- items - Master item catalog (shared)
- household_lists - Lists scoped to household + store
- household_item_classifications - Classifications per household + store
- household_list_history - History tracking
Key Relationships
- User → household_members → Household (many-to-many)
- Household → household_stores → Store (many-to-many)
- Household + Store → household_lists → Item (unique per combo)
- household_lists → household_list_history (one-to-many)
Role System
System-Wide (users.role)
- system_admin: App infrastructure control
- user: Standard user
Household-Scoped (household_members.role)
- admin: Full household control
- user: Standard member
Migration Steps
- Backup:
pg_dump grocery_list > backup.sql - Run:
psql -d grocery_list -f backend/migrations/multi_household_architecture.sql - Verify: Check counts, run integrity queries
- Test: Ensure app functionality
- Cleanup: Drop old tables after verification
API Changes (Planned)
Old Format
GET /api/list
POST /api/list/add
New Format
GET /api/households/:hId/stores/:sId/list
POST /api/households/:hId/stores/:sId/list/add
Frontend Changes (Planned)
New Contexts
const { user, isSystemAdmin } = useAuth();
const { activeHousehold, isAdmin } = useHousehold();
const { activeStore, householdStores } = useStore();
New Routes
/households - List households
/households/:id/stores/:sId - Grocery list
/households/:id/members - Manage members
/join/:inviteCode - Join household
Development Workflow
Phase 1: Database (Current)
- Review migration script
- Test on local dev database
- Run verification queries
- Document any issues
Phase 2: Backend API (Next)
- Create household.model.js
- Create store.model.js
- Update list.model.js for household scope
- Create middleware for household access
- Update routes
Phase 3: Frontend
- Refactor AuthContext → useAuth()
- Create HouseholdContext → useHousehold()
- Create StoreContext → useStore()
- Build household switcher
- Build store tabs
Testing Checklist
Database Migration
- All tables created
- All indexes created
- Users migrated to household
- Items deduplicated correctly
- Lists migrated with correct references
- Classifications preserved
- History preserved
- No NULL foreign keys
Backend API
- Household CRUD works
- Member management works
- Invite codes work
- Store management works
- List operations scoped correctly
- Permissions enforced
- History tracked correctly
Frontend UI
- Login/logout works
- Household switcher works
- Store tabs work
- Can create household
- Can join household
- Can add items
- Can mark bought
- Roles respected in UI
Rollback Strategy
If migration fails:
ROLLBACK;
If issues found after:
psql -d grocery_list < backup.sql
Support Resources
- Migration Script:
backend/migrations/multi_household_architecture.sql - Guide:
backend/migrations/MIGRATION_GUIDE.md - Architecture:
docs/multi-household-architecture-plan.md - Status: This file
Key Decisions
- ✅ Keep users.role for system admin
- ✅ Simplify household roles to admin/user
- ✅ Preserve user names in history (no anonymization)
- ✅ Shared item catalog with household-specific lists
- ✅ Context pattern refactoring (internal context + custom hooks)
Timeline
- Week 1-2: Database migration + testing
- Week 3-4: Backend API implementation
- Week 5-6: Frontend core implementation
- Week 7: Member management
- Week 8-9: Testing & polish
- Week 10: Production migration
Contact
For questions or issues during implementation, refer to:
- Architecture plan for design decisions
- Migration guide for database steps
- This file for quick status updates